保罗·泰玛presentation有这一行:Executors.newCacheThreadPoolevil,diediedie为什么它是邪恶的?我会大胆猜测:是不是因为线程数量会无限增长。因此,如果达到JVM的最大线程数,已被斜线标记的服务器可能会挂掉? 最佳答案 (这是保罗)幻灯片的目的是(除了有滑稽的措辞),正如您提到的,线程池在不受限制地创建新线程的情况下增长。线程池本质上代表系统内的队列和工作传输点。也就是说,有些事情正在为它提供工作(并且它也可能正在为其他地方提供工作)。如果线程池开始增长,那是因为它跟不上需求。一般来说
我有一个基于netty的应用程序,它监听多个tcp端口。所以每个端口都是这样初始化的bootstrap=newServerBootstrap(newNioServerSocketChannelFactory(Executors.newCachedThreadPool(),Executors.newFixedThreadPool(Settings.getDemuxPoolSize()),Settings.getDemuxPoolSize()));但是拥有这么多线程池(而且我有很多开放的TCP端口)对我来说是一种浪费。问题是:在Netty中跨多个服务器Bootstrap使用SAME线程池是
我想在整个应用程序中使用同一个线程池。为此,我可以将ExecutorService设为静态和全局,以便在需要时调用ThreadUtil.executorService来获取ExecutorService。publicclassThreadUtil{publicstaticfinalExecutorServiceexecutorService=Executors.newCachedThreadPool();}像这样实例化多个线程池可以吗?另外,我的应用是一个TCP服务器。如果我不知道池应该有多大,可以简单地使用newCachedThreadPool吗? 最佳答
我正在做一个项目,我需要确保每个线程都在特定范围内工作。例如:NO_OF_THREADS:2NO_OF_TASKS:10如果线程数为2,任务数为10,则每个线程将执行10个任务。所以这意味着2个线程将执行20个任务。在实际情况下,这些数字(任务数和线程数)将非常高,因为它们都可以在我的代码中配置。在上面的例子中,第一个线程应该使用1和10之间的id,第二个线程应该使用之间的id11和20如果有更多线程,依此类推。之后每个线程都会建立一个数据库连接,然后插入到数据库中。所以我的以下代码运行良好。publicstaticvoidmain(String[]args){finalintnoOf
在此测试场景中提交的任务(线程)数量也不大。 最佳答案 您需要提供有关如何在池上实例化和调用submit的代码示例(IP在这里应该不是问题,因为我们不需要您的Callable类或类似的东西)。根据您提供的信息,您几乎可以肯定在将可调用对象提交给它之前在某处关闭了执行程序服务。检查您是否对shutdown或shutdownNow进行了任何调用,如果是,请确保您不会在此时添加任务。除此之外,您可能希望注册您自己的java.util.concurrent.RejectedExecutionHandler实现以帮助调试;它的rejected
newCachedThreadPool()与newFixedThreadPool()相比我什么时候应该使用其中一种?在资源利用方面哪种策略更好? 最佳答案 我认为文档很好地解释了这两个函数的区别和用法:newFixedThreadPoolCreatesathreadpoolthatreusesafixednumberofthreadsoperatingoffasharedunboundedqueue.Atanypoint,atmostnThreadsthreadswillbeactiveprocessingtasks.Ifaddit