我正在使用Spring 4.3.8.RELEASE和Java 7.我想創建一個線程工廠來幫助管理我的應用程序中的某些工作人員。我宣佈我的線程工廠是這樣的如何等待我的線程工廠完成其所有任務?
<bean id="myprojectThreadFactory" class="org.springframework.scheduling.concurrent.CustomizableThreadFactory">
<constructor-arg value="prefix-"/>
</bean>
<bean id="myprojectTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="threadFactory" ref="myprojectThreadFactory"/>
<property name="corePoolSize" value="${myproject.core.thread.pool.size}" />
<property name="maxPoolSize" value="${myproject.max.thread.pool.size}" />
</bean>
但是,我在加入線程時遇到了問題。也就是說,我要等到所有的工作具有一定的任務,所以我有
m_importEventsWorker.work();
m_threadExecutor.shutdown();
System.out.println("done.");
在我的線程池,像這樣
public void work(final MyWorkUnit pmyprojectOrg)
{
final List<MyWorkUnit> allOrgs = new ArrayList<MyWorkUnit>();
if (pmyprojectOrg != null)
{
processData(pmyprojectOrg.getmyprojectOrgId());
} else {
allOrgs.addAll(m_myprojectSvc.findAllWithNonEmptyTokens());
// Cue up threads to execute
for (final MyWorkUnit myprojectOrg : allOrgs)
{
m_threadExecutor.execute(new Thread(new Runnable(){
@Override
public void run()
{
System.out.println("started.");
processData(myprojectOrg.getmyprojectOrgId());
}
}));
} // for
然而,什麼會打印出執行繼續之前完成是
done.
started.
started.
很清楚,我不是在等待。什麼是正確的方式來等待我的線程完成工作?
你想對線程做什麼?他們正在處理相同的數據集還是分開的數據?你能描述一下流程嗎? – jeorfevre
線程在不同的數據集上有用。我想知道什麼時候所有的線程都完成了他們的任務,但顯然「關機」方法不是要走的路。 – Dave
您可以調用'm_threadExecutir.submit(...)',並且該方法將返回一個'FutureTask'實例,您應該調用'FutureTask'的'get()'方法來等待任務完成。 – dabaicai