我正在使用带有 Java 7 的 Spring 4.3.8.RELEASE。我想创建一个线程工厂来帮助管理我的应用程序中的某些工作人员。我这样声明我的线程工厂
<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.
很明显,我没有在等。等待我的线程完成工作的正确方法是什么?