Der Unterschied zwischen CountDownLatch und Semaphore und das zugrunde liegende Prinzip

CountDownLatch

CountDownLatch stellt einen Zähler dar, und Sie können eine Zahl für countDownLatch festlegen. Ein Thread, der „await()“ von CountDownLatch aufruft, wird blockiert, und andere Threads können die Methode „countDown()“ von CountDownLatch aufrufen, um eins von der Zahl in CountDownLatch zu subtrahieren. Wenn die Zahl reduziert wird auf 0, alle Warte-Threads werden aktiviert.

Das entsprechende Grundprinzip besteht darin, dass beim Aufruf der Methode „await()“ die AQS-Warteschlange verwendet wird und sobald die Anzahl auf 0 reduziert wird, die AQS-Warteschlangen-Threads nacheinander aktiviert werden.

Semaphor

Semphore bedeutet Semaphor, die Anzahl der Lizenzen kann festgelegt werden, was bedeutet, dass mehrere Threads das Semaphor gleichzeitig verwenden dürfen und die Lizenz über die Methode acquire () abgerufen wird. Wenn keine Lizenz vorhanden ist, wird der Thread blockiert und über AQS in die Warteschlange gestellt, mit der die Methode „release()“ zum Freigeben einer Lizenz verwendet werden kann. Wenn ein Thread eine Lizenz freigibt, wird er nacheinander vom ersten Thread in der Warteschlange in AQS aktiviert, bis keine freie Lizenz mehr vorhanden ist.

おすすめ

転載: blog.csdn.net/weixin_49131718/article/details/131750378