2013-03-21 4 views
2

Я пишу программу, которая выполняет много потоков одновременно (параллельно), я использую TaskExecutor.AssertionError при использовании TaskExecutor

@Autowired TaskExecutor threadPoolTaskExecutor; 
@Test 
public void testSpringTaskExecutor() 
         throws InterruptedException { 
    assertNotNull(threadPoolTaskExecutor); 
    for (int k = 0; k < 5; k++) { 
     Runnable myThread = 
         new Workflow(new AtomicInteger(k)); 
     threadPoolTaskExecutor.execute(myThread); 
    } 
    Thread.sleep(500); 
    logger.info("Finished all threads"); 
} 

Когда я проверил свой код, был поднят AssertionError exeption. Я использую Spring Framework для управления исполнением.

здесь экран журнала:

Exception in thread "main" java.lang.AssertionError 
at org.junit.Assert.fail(Assert.java:92) 
at org.junit.Assert.assertTrue(Assert.java:43) 
at org.junit.Assert.assertNotNull(Assert.java:526) 

Любой есть идеи, пожалуйста :) Спасибо

+1

Что вы ожидаете ? Где вы инициализировали исполнитель задачи пула потоков? – Ingo

+0

класс, который реализует метод testSpringTaskExecutor, наследует от другого класса, который получает контекст из файла конфигурации @ContextConfiguration (classes = {JavaConfigurator.class}) , и я использую аннотацию @Autowired ApplicationContext sprinCtx; –

+0

Все это хорошо и хорошо, но, очевидно, это не инициализировало его, не так ли? – Ingo

ответ

1

Я нашел решение, я должен инициализировать threadPoolTaskExecutor поэтому, когда мы используем assertNotNull (threadPoolTaskExecutor) ; объект будет инициализирован, и мы можем выполнить наши потоки.

Вот метод инициализации:

public void initialize() { 
        logger.info("Creating ThreadPoolExecutor"); 
        BlockingQueue queue = createQueue(this.queueCapacity); 
        executorService = new ThreadPoolExecutor (
          this.corePoolSize, this.maxPoolSize, this.keepAliveSeconds, TimeUnit.SECONDS, 
          queue, this.threadFactory, this.rejectedExecutionHandler); 
       } 

и вот определение ExecutorService:

private ThreadPoolExecutor executorService; 

Спасибо Эндрю и Пейс и Инго за вашу помощь :)

Смежные вопросы