如何在使用CyclicBarriers时正确停止线程

时间:2016-08-22 14:08:50

标签: java multithreading java-threads cyclicbarrier

我必须使用许多线程在缓存上进行操作,因此创建了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());

但执行者服务并没有进入下一个。

0 个答案:

没有答案