我必须使用许多线程在缓存上进行操作,因此创建了3个从Thread扩展的类(我现在意识到它们也可以是Runnables,或者应该是)。需要注意的是,这些我运行其中一个线程的多个实例但不能同时运行。如:
public class Operation1 extends Thread
public class Operation2 extends Thread
public class Operation3 extends Thread
Thread[] operation1Threads = new Thread[5];
所以在我完成这个之后,我为第二个操作(随机)创建新线程。 以下是我的run方法的创建方式 我利用循环障碍等待线程同时工作。
public volatile boolean running = true;
public void run() {
while (running) {
cyclicbarrier1.await();
//some operation here
cyclicbarrier2.await();
}
}
主线程主要关注运行这些的时间和结束时间,我尝试在第二次操作之前停止线程。但似乎我的线程实际上并没有停止。
编辑:我应该注意到我已经尝试过直接中断线程。并试图重新设置障碍,这两个障碍似乎都是其他线程上的答案。for (int i=0; i < numthreads; i++) {
ops[i].interrupt();
}
我使用ExecutorService按顺序管理这些操作。
ExecutorService es = Executors.newSingleThreadExecutor();
es.submit(new Operation1Runnable());
es.submit(new Operation2Runnable());
但执行者服务并没有进入下一个。