こんにちは、ちょっとした問題があり、どこが間違っているのかわかりません。
Xを繰り返し印刷する2つのスレッドXと、Yを繰り返し印刷するYがあります。Y は X の後に出力する必要があります。
Semaphore クラス BinarySemaphore から派生しました。
public class BinarySemaphore extends Semaphore {
public BinarySemaphore(int initial){
value = (initial>0) ? 1 : 0;
}
public synchronized void P() throws InterruptedException{
while (value==0){
wait();
}
value = 0;
notify();
}
public synchronized void V(){
value = 1;
notify();
}
}
Xスレッドクラス
public class xThread extends Thread implements Runnable{
private BinarySemaphore xSemaphore;
private BinarySemaphore ySemaphore;
public xThread(String myName, BinarySemaphore nSemaphoreX, BinarySemaphore nSemaphoreY ){
super(myName);
xSemaphore = nSemaphoreX;
ySemaphore = nSemaphoreY;
}
public void run(){
try{
xSemaphore.P();
System.out.println(getName());
ySemaphore.V();
}catch(InterruptedException E){
System.out.println("Thread X was interrupted");
}
}
}
Yねじクラス
public class yThread extends Thread implements Runnable{
private BinarySemaphore xSemaphore;
private BinarySemaphore ySemaphore;
public yThread(String myName, BinarySemaphore nSemaphoreX, BinarySemaphore nSemaphoreY ){
super(myName);
xSemaphore = nSemaphoreX;
ySemaphore = nSemaphoreY;
}
public void run(){
try{
ySemaphore.P();
System.out.println(getName());
xSemaphore.V();
}catch(InterruptedException E){
System.out.println("Thread Y was interrupted");
}
}
}
これらのスレッドを10秒間実行すると、得られるのは
X Y
BUILD SUCCESSFUL (合計時間: 10 秒)
ここで何が欠けていますか? 10秒間交互に繰り返さないのはなぜですか?