静的セマフォインスタンスが1つあります。
Semaphore semaphore = new Semaphore(1);
これで、2つのスレッド(送信スレッドと受信スレッド)ができました。
スレッドの送信:
public class SendingThread implements Runnable {
private Semaphore semaphore;
public SendingThread(Semaphore semaphore){
this.semaphore = semaphore;
}
@Override
public void run() {
try {
System.out.println("1");
Thread.sleep(4000);
this.semaphore.acquire();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
e.printStackTrace();
}
}
}
スレッドの受信:
public class RecievingThread implements Runnable {
private Semaphore semaphore;
public RecievingThread(Semaphore semaphore){
this.semaphore = semaphore;
}
@Override
public void run() {
System.out.println("2");
this.semaphore.release();
System.out.println("3");
}
}
私の理解に従ってこの2つのスレッドを開始すると、受信スレッドは、送信スレッドが 受信スレッドを続行できることを通知するまで4秒間待機します。これは、4秒の遅延で出力されることを意味し ますが、このコードを実行すると、3つの値すべてがすぐに出力されます。なんで?System.out.println("3");
私は何かが足りないのですか?