我有一个简单的javaExecutorService运行一些任务对象(实现Callable)。ExecutorServiceexec=Executors.newSingleThreadExecutor();Listtasks=newArrayList();//...createsometasksfor(CallableTasktask:tasks){Futurefuture=exec.submit(task);result=(String)future.get(timeout,TimeUnit.SECONDS);//TASKSloadsomeclassesandinvoketheirm
一个单元如何测试在使用ExecutorService时是否为Runnable任务生成了一个新线程?基本上,我的应用程序有一个静态线程池。publicstaticfinalExecutorServiceexecutorService=Executors.newCachedThreadPool();我想将这个线程池用于我的单元测试,而不是模拟一个或注入(inject)一个新的线程池,因为不同的线程池可以显着改变我的应用程序的行为(固定的、缓存的、计划的),ETC);我想确保我使用其运行时线程池测试应用程序的行为。缓存线程池似乎最适合我。问题在于,由于它是静态的并且线程被缓存60秒,因此只有
这个问题在这里已经有了答案:Namingthreadsandthread-poolsofExecutorService(20个答案)关闭5年前。我正在使用ExecutorService来执行一些Callable,但线程的名称类似于fixed-pool-1-thread-1。如何更改线程的名称?如果不可能,还有另一种方法来执行我可以设置线程名称的Callables吗?
我不明白为什么这段代码不能编译ExecutorServiceexecutor=newScheduledThreadPoolExecutor(threads);classDocFeederimplementsCallable{....}...Listlist=newLinkedList();list.add(newDocFeeder(1));...executor.invokeAll(list);错误消息是:ThemethodinvokeAll(Collection>)inthetypeExecutorServiceisnotapplicableforthearguments(List)
保罗·泰玛presentation有这一行:Executors.newCacheThreadPoolevil,diediedie为什么它是邪恶的?我会大胆猜测:是不是因为线程数量会无限增长。因此,如果达到JVM的最大线程数,已被斜线标记的服务器可能会挂掉? 最佳答案 (这是保罗)幻灯片的目的是(除了有滑稽的措辞),正如您提到的,线程池在不受限制地创建新线程的情况下增长。线程池本质上代表系统内的队列和工作传输点。也就是说,有些事情正在为它提供工作(并且它也可能正在为其他地方提供工作)。如果线程池开始增长,那是因为它跟不上需求。一般来说
在发生特定超时时,我需要终止/取消/中断/使正在运行的线程失败。我使用ExecutorService来管理线程池,通过它我可以使用Future的cancel()方法取消任务,该方法将其从ExecutorService的View中删除,但线程本身继续运行。网上环顾四周,人talkaboutinterruptingthreads有一个使用isInterrupted()方法的循环或正在等待可以通过显示InterruptedException来处理的IO。杀死既不循环(或没有任何其他Hook)也不等待IO的线程的一般做法是什么?环顾四周,Thread.stop()似乎可以满足我的需要(只是盲目
有没有ExecutorService行为类似于具有以下特征的线程池的实现?始终至少有X个Activity线程。如果提交了任务并且所有Activity线程都忙,则启动一个新线程,最多Y个线程。如果提交了一个任务,并且所有Y线程都忙,则该任务被排队。如果没有提交新任务,池将缩减为X个Activity线程。非常标准的线程池行为。你会认为ThreadPoolExecutor会处理这个,但是executorService=newThreadPoolExecutor(2,10,//min/maxthreads60,TimeUnit.SECONDS,//timeofinactivitybefores
我正在使用ScheduledExecutorService执行以固定速率调用服务的任务。服务可能会向任务返回一些数据。该任务将数据存储在队列中。一些其他线程慢慢地从队列中挑选项目importjava.util.concurrent.BlockingQueue;importjava.util.concurrent.LinkedBlockingQueue;importjava.util.concurrent.ScheduledExecutorService;importjava.util.concurrent.TimeUnit;publicclassEverlastingThreadimp
我正在使用ExecutorService启动任务,分派(dispatch)需要按任务特定标准分组的任务:Task[type=a]Task[type=b]Task[type=a]...我想定期输出每个任务花费的平均时间长度(按type分组)以及平均/中位数和标准差等统计信息。当然,这需要非常快,理想情况下不应导致各个线程在报告统计信息时同步。执行此操作的良好架构是什么? 最佳答案 ThreadPoolExecutor提供beforeExecute和afterExecute您可以覆盖的方法。您可以使用它们在单个(ExecutorServ
在我的网络应用程序中,我有一个后台服务。此服务使用Generator类,该类包含一个Engine类和一个配置为使用多线程并接受GeneratorTasks的ExecutorService。@ComponentpublicclassGenerator{@AutowiredprivateEngineheavyEngine;privateExecutorServiceexec=Executors.newFixedThreadPool(3);//IactuallypassthesingletoninstanceGeneratorclassintothetask.publicvoidsubmit