セマフォを読んだ後、私はこの2つのスレッドAとBを作成するこのテストコードを試しました。私の目標は、スレッドAのスレッドBでのいくつかの操作が完了するまで10秒待ちます。しかし、スレッドBのロジックを少し変えても、決して出てこない無限のwhileループを導入することで、スレッドAもぶら下がり、プログラムは永遠に実行されます。誰でも私が探している目標を達成する方法を教えてもらえますか?セマフォとスレッドの問題
パッケージパック;
import java.util.concurrent.Semaphore;
public class Concurrency {
public int count = 0;
public static void main(String args[]) throws Exception {
final Semaphore sem = new Semaphore(1, true);
Thread thrdA, thrdB;
thrdA = new Thread(new Runnable() {
@Override
public void run() {
synchronized (sem) {
try {
sem.wait(10000);
System.out.println("thread1");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
thrdB = new Thread(new Runnable() {
@Override
public void run() {
synchronized (sem) {
System.out.println("thread2");
while(true){
}
}
}
});
thrdA.start();
thrdB.start();
thrdA.join();
thrdB.join();
}
}
なぜ、あなたが 'acquire()'してから 'release()'しないのなら、 'セマフォ'を使っていますか?あなたは、その目的のために 'private final Object'を使ったことがあります。 – corsiKa