我已經寫下了類,以瞭解SemaPhore。但結果是意外的。我無法理解SemaPhore的實際工作。它如何被用作鎖,信號和計數?無法理解或實現信號量
public class TrySemaPhore
{
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(10);
Semaphore semaphore = new Semaphore(2);
Runnable newTask=() -> {
boolean permit = false;
try {
permit = semaphore.tryAcquire();
if(permit)
System.out.println("doing work");
} finally {
if(permit){
semaphore.release();
System.out.println("Work done!!");
}
}
};
for(int i=0; i<=4; i++){
executor.submit(newTask);
}
stop(executor);
}
private static void stop(ExecutorService executor) {
/*code to stop executor*/
}
}
結果
doing work
Work done!!
doing work
Work done!!
doing work
Work done!!
doing work
Work done!!
doing work
Work done!!
我有線程的10個固定數。我有5個不同的任務(for循環)需要完成。我有2個許可證的信號量。我想理解Semaphore,它以一種非常簡單的方式獲益**(不像通過Google提供的理論)。
不幸的例子。每個線程在'aquire()'後面都會發布許可證,所以很少有機會可以使用,並且可以看到並行工作。 在'aquire()'和'release()'之間添加'Thread.sleep(randomNumber)'。 –