JBoss OrderedExecutor + CountDownLatch不能正常工作吗?

时间:2011-08-20 02:17:25

标签: java multithreading jboss

使用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();

1 个答案:

答案 0 :(得分:1)

您正在使用JBossExecutors.directExecutor()。此执行程序不在单独的线程中执行任务,而是在调用execute的线程中执行任务(这对于测试很有用)。

你的代码阻塞第一次调用orderedExec.executeNonBlocking,因为那是在同一个线程中调用taskUnfreezer.await(),你永远不会得到taskUnfreezer.countDown()