Javaプログラミングには初めてです。私はwait()とnotify()を使って2つのスレッドを実行したい。しかし、私はスレッドの同期、スリープ、歩留まりまたは待機(パラメータ)のタスクフラグを使用することはできません。私はそれを書いたが、私は睡眠を使用しなければならなかった。誰かが私にそれを睡眠なしに変えるのを助けることができますか? これは私のメインクラスですJava - wait()とnotify()を持つ2つのスレッド
public class mainClass{
public static void main(String args[]) throws InterruptedException {
final Processor processor = new Processor();
for(int i=0; i<100; i++){
final int z = i;
Thread trainer = new Thread(new Runnable(){
public void run(){
try{
processor.produce(z);
}catch(InterruptedException e){
e.printStackTrace();
}
}
});
Thread sportsman = new Thread(new Runnable(){
public void run(){
try{
processor.consume(z);
}catch(InterruptedException e){
e.printStackTrace();
}
}
});
trainer.start();
sportsman.start();
trainer.join();
sportsman.join();
}
System.out.println("100 Tasks are Finished.");
}
}
これは私の2番目のクラスです。
public class Processor {
public void produce(int n) throws InterruptedException {
synchronized (this){
System.out.println("Trainer making " + (n+1) + " Task...");
wait();
System.out.println("");
}
}
public void consume(int m) throws InterruptedException {
Thread.sleep(1);
//I want to run the code without using sleep and get same output
synchronized (this){
System.out.println("Sportman doing " + (m+1) + " Task...");
notify();
}
}
}
これは私の出力です。
Trainer making 1 Task...
Sportman doing 1 Task...
Trainer making 2 Task...
Sportman doing 2 Task...
.
.
.
Trainer making 99 Task...
Sportman doing 99 Task...
Trainer making 100 Task...
Sportman doing 100 Task...
100 Tasks are Finished.
ありがとうございます。私の英語は悪いです。申し訳ありません。
スレッドを待たずに通知すると、それは失われます。状態を変更した後に通知する必要があります。次に、wait()のループでその状態の変化を疑似的に確認する必要があります。 –
'wait()'と 'notify()'の正しい使い方がここに書かれています。 https://docs.oracle.com/javase/tutorial/essential/concurrency/guardmeth.html –
出力がどのように見えますか/期待していますか? –