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(); } } }
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!