我正在使用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