我在玩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();
最佳答案
您正在使用JBossExecutors.directExecutor()。该执行程序不会在单独的线程中执行操作,而是在调用execute的线程中执行任务(这对于测试很有用)。
您的代码块在第一次调用orderedExec.executeNonBlocking时就被阻止了,因为这是在同一线程中调用taskUnfreezer.await(),因此您永远都不会进入taskUnfreezer.countDown()