我必须使用许多线程对缓存进行操作,因此创建了 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());
但是 executorservice 并没有转到下一个。