使用OrderedExecutor,我尝试使用CountDownLatch同时启动所有提交的任务,但任务没有启动,它们被冻结。
我错过了什么吗?
import org.jboss.threads.OrderedExecutor;
final CountDownLatch taskUnfreezer = new CountDownLatch(1);
OrderedExecutor orderedExec = new OrderedExecutor(JBossExecutors.directExecutor(),10,JBossExecutors.directExecutor()) ;
orderedExec.executeNonBlocking(
new Runnable() {
@Override
public void run() {
try {
taskUnfreezer.await();
System.out.println("Task 1");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
orderedExec.executeNonBlocking(
new Runnable() {
@Override
public void run() {
try {
taskUnfreezer.await();
System.out.println("Task 2");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
// Try to start all tasks
taskUnfreezer.countDown();
答案 0 :(得分:1)
您正在使用JBossExecutors.directExecutor()。此执行程序不在单独的线程中执行任务,而是在调用execute的线程中执行任务(这对于测试很有用)。
你的代码阻塞第一次调用orderedExec.executeNonBlocking,因为那是在同一个线程中调用taskUnfreezer.await(),你永远不会得到taskUnfreezer.countDown()