java1.5及1.6中通过ExecutorService提供了线程池的支持。我们可以按照如下的方法建立10个线程容量的线程池: ExecutorService exec = Executors.newFixedThreadPool(10);
for (i = 0; i < taskAmount; i++)
exec.execute(new Task(...)); // 或者new Thread(...)这样就把所有的任务提交给了线程池,由exec负责调度线程的执行,切换。
我们还应该加上下面一行代码: exec.shutdown();这样线程池在任务结束之后才会终止。我的问题是这样的:线程池的使用只是主线程的一个中间过程,而我必须等线程池中止之后才能继续后续的操作。所以我在上面的代码后面加上线程池中止判断语句,如果线程池仍在工作,主线程sleep。 while (!exec.isTerminated())
{
try
{
Thread.sleep(1000);
} catch (InterruptedException e)
{
e.printStackTrace();
}
}可是我总觉得这不是最好的中止判断方式,至于哪里不好么……我也不清楚,只是觉得java应该提供更友好的接口,比如说可以让主线程等待线程池结束的方法,但是我没有找到。因此请教一下各路同道,有没有一种更好的方式实现呢? 先行谢过哦…… :)
for (i = 0; i < taskAmount; i++)
exec.execute(new Task(...)); // 或者new Thread(...)这样就把所有的任务提交给了线程池,由exec负责调度线程的执行,切换。
我们还应该加上下面一行代码: exec.shutdown();这样线程池在任务结束之后才会终止。我的问题是这样的:线程池的使用只是主线程的一个中间过程,而我必须等线程池中止之后才能继续后续的操作。所以我在上面的代码后面加上线程池中止判断语句,如果线程池仍在工作,主线程sleep。 while (!exec.isTerminated())
{
try
{
Thread.sleep(1000);
} catch (InterruptedException e)
{
e.printStackTrace();
}
}可是我总觉得这不是最好的中止判断方式,至于哪里不好么……我也不清楚,只是觉得java应该提供更友好的接口,比如说可以让主线程等待线程池结束的方法,但是我没有找到。因此请教一下各路同道,有没有一种更好的方式实现呢? 先行谢过哦…… :)
if(future.isDone() )//如果线程没有执行完,将阻塞
.....
exec.awaitTermination(TIMEOUT, UNIT);
exec.shutdown();
当然。5楼兄弟的方法,就可以借鉴一下。
exec.awaitTermination(TIMEOUT, UNIT); 顶。