Heim > Java > javaLernprogramm > Wie verwende ich Semaphore, um die Strombegrenzung in Java zu implementieren?

Wie verwende ich Semaphore, um die Strombegrenzung in Java zu implementieren?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2023-04-21 20:34:06
nach vorne
1541 Leute haben es durchsucht

Konzept

1. Semaphor kann als Semaphor angesehen werden. Konzeptionell verwaltet ein Semaphor eine Reihe von Anmeldeinformationen, die auf die Ressource zugreifen und diese nach der Verwendung freigeben können abgeschlossen ist. Wir können Semaphore verwenden, um den gleichzeitigen Zugriff von Threads auf eine bestimmte Ressource einzuschränken.

2. Es lässt sich einfach wie folgt zusammenfassen: ein Schalter, eine Warteschlange und drei Methoden. Im Semaphor-Modell sind Zähler und Warteschlangen transparent und können nur über die drei vom Semaphor-Modell bereitgestellten Methoden aufgerufen werden, nämlich Internet, Erwerb und Freigabe.

Instanzen

public class SemaphoreDemo {
 
    static class Link {
    }
 
    static class ObjPool<T, R> {
 
        final List<T> pool;
 
        final Semaphore semaphore;
 
        ObjPool(int size, T t) {
            pool = new Vector<>(size);
            for (int i = 0; i < size; i++) {
                pool.add(t);
            }
            semaphore = new Semaphore(size);
        }
 
        public R exec(Function<T, R> func) throws Exception {
            T t = null;
            semaphore.acquire();
            try {
                System.out.println(Thread.currentThread().getName() + "---------争夺锁--------");
 
                t = pool.remove(0);
                System.out.println(Thread.currentThread().getName() + " 拿到锁执行");
                return func.apply(t);
            } finally {
                pool.add(t);
                semaphore.release();
            }
        }
    }
 
    public static void main(String[] args) {
        ObjPool objPool = new ObjPool(5, new Link());
        for (int i = 0; i < 30; i++) {
            new Thread(() -> {
                try {
                    objPool.exec(t -> t.toString());
                } catch (Exception e) {
                }
            }).start();
        }
    }
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie verwende ich Semaphore, um die Strombegrenzung in Java zu implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Aktuelle Ausgaben
Kann Java als Backend des Webs verwendet werden?
Aus 1970-01-01 08:00:00
0
0
0
Installieren Sie JAVA
Aus 1970-01-01 08:00:00
0
0
0
Java kann nicht installiert werden
Aus 1970-01-01 08:00:00
0
0
0
Ist das in der Java-Sprache?
Aus 1970-01-01 08:00:00
0
0
0
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage