我对以下内容感到困惑:
要在Java程序中使用线程,最简单的方法是扩展Thread类并实现可运行接口(或简单实现可运行)。
启动线程的执行。我们必须调用Thread的start()方法,然后调用线程的run()方法。线程开始。
方法start()(除非我错了)必须精确调用,每个线程只能调用一次。因此,线程实例不能被重用,除非run方法本身以无限循环的方式运行,这有助于自定义实现线程的重用。
现在的Javadoc link text 说通过执行程序重新执行java线程
调用execute将重用以前构造的线程(如果可用)
我不明白这是如何实现的。 我在执行方法的执行方法中提供了我的自定义线程,例如
ExecutorService myCachedPool = Executors.newCachedThreadPool();
myCachedPool.execute(new Runnable(){public void run(){
//do something time consuming
}});
如何将此自定义线程删除到执行程序框架被重用?
Executor被允许调用方法start()超过1次,而我们不能在我们的程序中? 我误解了什么吗?
谢谢。
@乔恩:对不起,我失去了你。所以框架的内部线程被重用,而不是作为参数传递的可运行?我委托给框架的线程每次都会重新实例化,但是由框架创建的内部线程的同一个实例进行重新实例化? – Cratylus 2010-09-19 11:50:00
@ user384706:是的。你的runnable *不是一个线程 - 它只是一个要执行的任务。你需要区分两者;他们非常不同。 – 2010-09-19 11:53:27
@Jon:非常感谢。我唯一不确定的是,使用Executors.newCachedThreadPool()的好处是什么? 因为如果我实现runnable(对于任务)的类实例化的代价很高,那么它将不会被重用,并且框架的相同线程将继续使用任务的新实例。那么我会从这个api中获得什么?除非这个概念是每个实现可运行的类都是最小的。 – Cratylus 2010-09-19 12:05:01