我在玩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()

10-08 00:24