当前位置: 首页 > 知识库问答 >
问题:

缓存线程池如何重用现有线程

丁鸿信
2023-03-14

我刚刚开始研究Java的executors类和newcachedthreadpool()方法。根据API,生成的线程池重用现有的thread对象来执行新任务。

我有点困惑这是如何实现的,因为我在ThreadAPI中找不到任何方法可以设置现有Thread对象的行为。

例如,可以从runnable对象创建新的线程,这使得线程调用runnablerun()方法。但是,线程API中没有将runnable作为参数的setter方法。

我会很感激你的指点。

共有1个答案

韩梓
2023-03-14
public void run() {
    while(true) {
        if(tasks available) {
           Runnable task = taskqueue.dequeue();
           task.run();
        } else {
           // wait or whatever
        }
    }
}
 类似资料:
  • 问题内容: 我刚刚开始研究Java的类和方法。根据API,生成的线程池将现有对象重用于新任务。 我对此感到有些困惑,因为我无法在API中找到任何方法来设置现有对象的行为。 例如,您可以创建一个 新的 从一个对象,这使得调用的方法。但是,API中没有使用a 作为参数的setter方法。 我将不胜感激任何指针。 问题答案: 执行人员在后台为您完成所有工作。是的,它仅使用现有的线程API。 下面的链接提

  • 每个人我对使用线程池有一个误解。实际结果与该类的API描述不同。当我在线程池中使用时,它不重用线程,线程池等待构造函数中设置的KeepAliveTime,然后杀死这个线程并创建一个新线程。当我将KeepAliveTime设置为较小值时,比如1秒或更短,它会删除一个线程并重新创建它,但如果我设置一分钟,则不会创建新线程,因为不允许创建,队列已经满,所以所有任务都会被拒绝,但KeepAliveTime

  • 本文向大家介绍固定线程池和缓存线程池之间的区别。,包括了固定线程池和缓存线程池之间的区别。的使用技巧和注意事项,需要的朋友参考一下 执行器框架是使用线程池概念设计的。线程池是重用已经创建的线程的方法,而不是每次执行当前任务都创建一个新线程的方法。 Executors类提供了一种工厂方法来创建线程池。ThreadPoolExecutor类是从许多Executors工厂方法返回的执行器的基本实现。 序

  • 问题内容: 我有一个.csv文件,其中包含超过7000万行,其中每行将生成一个 Runnable ,然后由线程池执行。此Runnable将一条记录插入Mysql。 此外,我想记录csv文件的位置,以便 RandomAccessFile 定位。该位置被写入 File 。当线程池中的所有线程完成时,我想写入此记录。因此调用ThreadPoolExecutor.shutdown()。但是,当更多行出现时

  • 问题内容: 您能解释一下Netty如何使用线程池工作吗?我是否正确理解,线程池有两种:老板线程和工人线程。老板用于执行I / O,而worker用于调用用户回调(messageReceived)来处理数据? 问题答案: 这是来自NioServerSocketChannelFactory文档 一个ServerSocketChannelFactory,它创建一个基于NIO的服务器端ServerSock

  • 问题内容: 我有一个使用该框架的Java应用程序,并且我的代码看起来像这样 我的理解是,JVM会在内部创建5个线程的池。现在,当我在探查器中检查执行情况时,会得到类似的信息。 , 我需要一种方法来区分由我创建的和由服务器创建的 。 我在想,如果我可以命名线程池,它应该可以解决问题,但是看不到任何允许我执行此操作的API。 提前致谢。 问题答案: 您可以将自己的ThreadFactory传递给Sch