javadoc表示,执行者返回的服务。newCachedThreadPool
重用线程。这怎么可能?一个线程只能通过调用start
启动一次。那么他们是如何实施的呢?此服务的线程在无限循环中运行,它们的Runnable
-s会按需更换吗?
Runnable可以调用另一个Runnable。
每个线程只运行一个主Runnable,但是Runnable从共享的BlockingQueue中获取Runnables并调用它们,直到它关闭。
是的。
final BlockingQueue<Runnable> queue = ...
Runnable runs = new Runnable() { public void run() {
while(running)
queue.take().run();
}};
你可以阅读代码,看看它是如何做到的。
可以通过调用Executors类的静态newCachedThreadPool()方法来获取缓存的线程池。 语法 (Syntax) ExecutorService executor = Executors.newCachedThreadPool(); 哪里 newCachedThreadPool方法创建具有可扩展线程池的执行程序。 这样的执行程序适用于启动许多短期任务的应用程序。 例子 (Exam
我读到有一个线程池,这个池注定要减少创建新线程的成本(至少我这样理解下面的短语): 当您向执行程序发送任务时,它会尝试使用一个池线程来执行此任务,以避免线程的持续生成。[Java7并发Cookbook] 但是,我知道我们没有办法在Java重启线程。 问题:ThreadPoolExecutor如何避免创建新线程?
我刚刚开始研究Java的类和方法。根据API,生成的线程池重用现有的对象来执行新任务。 我有点困惑这是如何实现的,因为我在API中找不到任何方法可以设置现有对象的行为。 例如,可以从对象创建新的,这使得调用的方法。但是,API中没有将作为参数的setter方法。 我会很感激你的指点。
问题内容: 我有一个.csv文件,其中包含超过7000万行,其中每行将生成一个 Runnable ,然后由线程池执行。此Runnable将一条记录插入Mysql。 此外,我想记录csv文件的位置,以便 RandomAccessFile 定位。该位置被写入 File 。当线程池中的所有线程完成时,我想写入此记录。因此调用ThreadPoolExecutor.shutdown()。但是,当更多行出现时
问题内容: 我刚刚开始研究Java的类和方法。根据API,生成的线程池将现有对象重用于新任务。 我对此感到有些困惑,因为我无法在API中找到任何方法来设置现有对象的行为。 例如,您可以创建一个 新的 从一个对象,这使得调用的方法。但是,API中没有使用a 作为参数的setter方法。 我将不胜感激任何指针。 问题答案: 执行人员在后台为您完成所有工作。是的,它仅使用现有的线程API。 下面的链接提
问题内容: 我试图编写一个文件监视器,它将检查文件是否添加了新行,该监视器实际上是一个线程,它将始终由randomaccessfile读取该行。 这是监视器的核心代码: 这是一些帮助类: 这是调用监视器的示例: 现在,我的问题是,如果我仅调用以下代码,代码就可以很好地工作: 这将监视文件的行追加,并通知侦听器。 但是,当我致电: 这意味着我想监视另一个文件而不是之前。 因此,在Monitor中,我