0

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

4

0 回答 0