多くのスレッドを使用してキャッシュ上で操作を行う必要があるため、Thread から拡張する 3 つのクラスを作成しました (これらは Runnables でもある、またはそうあるべきであることがわかりました)。注意してください、これらはこれらのスレッドの1つのインスタンスを複数実行していますが、同時には実行していません。次のように:
public class Operation1 extends Thread
public class Operation2 extends Thread
public class Operation3 extends Thread
Thread[] operation1Threads = new Thread[5];
したがって、これを終了した後、2 番目の操作用に新しいスレッドを (ランダムに) 作成します。以下は、私の run メソッドの作成方法です。
循環バリアを使用して、スレッドが同時に機能するのを待ちます。
public volatile boolean running = true;
public void run() {
while (running) {
cyclicbarrier1.await();
//some operation here
cyclicbarrier2.await();
}
}
メインスレッドは、これらを実行する時間に焦点を当てており、その時間の終わりに、2番目の操作に取り組む前にスレッドを停止しようとします. しかし、私のスレッドは実際には停止していないようです。
編集:スレッドを直接中断しようとしたことに注意してください。そして、バリアをリセットしようとしましたが、どちらも他のスレッドで見つかった回答からの悪い習慣であると思われました。
for (int i=0; i < numthreads; i++) {
ops[i].interrupt();
}
ExecutorService を使用して、これらの操作を順番に管理します。
ExecutorService es = Executors.newSingleThreadExecutor();
es.submit(new Operation1Runnable());
es.submit(new Operation2Runnable());
しかし、executorservice は次のサービスに進みません。