JBoss OrderedExecutor + CountDownLatch не работает, как я ожидаю? - PullRequest
1 голос
/ 20 августа 2011

Играя с 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 Ответ

1 голос
/ 20 августа 2011

Вы используете JBossExecutors.directExecutor (). Этот исполнитель не выполняет вещи в отдельном потоке, но вместо этого выполняет задачи в потоке, который вызывает execute (это полезно для тестирования).

Ваш кодовый блок при первом вызове orderExec.executeNonBlocking, так как он вызывает taskUnfreezer.await () в том же потоке, и вы никогда не попадете в taskUnfreezer.countDown ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...