私は、プロセスを実行するためにお互いを待つ必要が複数のスレッドを持っています。これは要件のためにこのようにしなければなりません。もし私がコードを表示し、期待される出力を見せたらそれは意味をなさないでしょう。ここに私のメインクラスです:複数のスレッドのステップ実行
public static ThreadedJob job1, job2;
public static ArrayList<Thread> threads = new ArrayList<Thread>();
public static void main(String[] rags) throws InterruptedException{
job1 = new Job1("Thread1:");
job2 = new Job2("Thread2:");
job1.run();
job2.run();
threads.add(new Thread(job1));
threads.add(new Thread(job2));
if (job1.getCounter() > job2.getCounter()) {
threads.get(0).wait();
threads.get(1).notify();
}
if (job1.getCounter() < job2.getCounter()) {
threads.get(1).wait();
System.out.println(true);
threads.get(0).notify();
}
}
そして、ここでここで
public class ThreadedJob implements Runnable{
protected String name;
protected int counter = 0;
public ThreadedJob(String name){
this.name = name;
}
@Override
public void run() {
System.out.println(name + " job 1 complete");
counter++;
System.out.println(name + " job 2 complete");
counter++;
System.out.println(name + " job 3 complete");
counter++;
}
public int getCounter(){ return counter; }
}
です(今ちょうどすべてであること)を拡張し、スーパー(名前を呼ぶためにジョブ1とJOB2クラス)、スレッドのジョブ・クラスであります予想される出力:
Thread1: job 1 complete Thread2: job 1 complete Thread1: job 2 complete Thread2: job 2 complete Thread1: job 3 complete Thread2: job 3 complete
ここでは私のコードから出力された:
Thread1: job 1 complete Thread1: job 2 complete Thread1: job 3 complete Thread2: job 1 complete Thread2: job 2 complete Thread2: job 3 complete
質問:スレッドが一時停止してがどのように私はそれを作ることができ、行くようにできるように、そして継続。かなり多くの人が、どのようにステップアップして、期待される出力を得るのを待つことができますか?ありがとう!
重要なお知らせ:これはx個のスレッドで動作する必要があり、2でテストしています。また、スレッドは実際のアプリケーションではほとんどの時間は異なるロジックで動作しますが、同じ時間。
私はあなたのスレッドを開始するのを忘れたと思います - あなたは直接ランナブルを実行しています。スレッドは何もしていません。とにかく、ソートされたら、 'CyclicBarrier'や' CountdownLatch'のようなものを見てください。 – RealSkeptic
@RealSkeptic私はやったと思った...。 – Luke
Ah。さて、あなたはスレッドの非常に基本的なものから始める必要があります。 'run'メソッドを使うと、現在のスレッド**のrunnables **が実行され、スレッドは開始されません。 [Oracleチュートリアル](https://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html)を参照してください。 ) – RealSkeptic