草庐IT

Executorservice

全部标签

java - 如何在 Java 5 中使用 ExecutorService 实现任务优先级?

我正在实现一个线程池机制,我想在其中执行不同优先级的任务。我想有一个很好的机制,我可以向服务提交高优先级任务,并在其他任务之前安排它。任务的优先级是任务本身的固有属性(我是否将该任务表示为Callable或Runnable对我来说并不重要)。现在,从表面上看,我可以使用PriorityBlockingQueue作为我的ThreadPoolExecutor中的任务队列,但该队列包含Runnable对象,这可能是也可能不是我提交给它的Runnable任务。此外,如果我提交了Callable任务,则不清楚这将如何映射。有没有办法做到这一点?我真的不想为此自己动手,因为那样我更有可能弄错。(顺

java - 使用 ExecutorService 有什么好处?

与将Runnable传递给Thread构造函数的运行线程相比,使用ExecutorService有什么优势? 最佳答案 ExecutorService抽象出许多与原始Thread等低级抽象相关的复杂性。它提供了安全启动、关闭、提交、执行和阻塞任务成功或突然终止的机制(表示为Runnable或Callable)。来自JCiP,第6.2节,直接出自马口:Executormaybeasimpleinterface,butitformsthebasisforaflexibleandpowerfulframeworkforasynchrono

java - Java 中这段代码中的 ExecutorService.submit 和 ExecutorService.execute 有什么区别?

我正在学习使用ExectorService来汇集threads并发送任务。我下面有一个简单的程序importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;importjava.util.concurrent.TimeUnit;classProcessorimplementsRunnable{privateintid;publicProcessor(intid){this.id=id;}publicvoidrun(){System.out.println("Starting:"+id);

java - 为什么ExecutorService不调用UncaughtExceptionHandler?

我偶然发现了一个问题,可以总结如下:当我手动创建线程(即通过实例化java.lang.Thread)时,会适本地调用UncaughtExceptionHandler。但是,当我将ExecutorService与ThreadFactory一起使用时,将省略处理程序。我错过了什么?publicclassThreadStudy{privatestaticfinalintTHREAD_POOL_SIZE=1;publicstaticvoidmain(String[]args){//createuncaughtexceptionhandlerfinalUncaughtExceptionHandl

java - Spring ThreadPoolTask​​Executor vs Java Executorservice cachedthreadpool

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题吗?更新问题,以便editingthispost提供事实和引用来回答它.关闭8年前。Improvethisquestion使用的优缺点是什么SpringThreadPoolTaskExecutor与JavaExecutorservicecachedthreadpool即使spring是Java并发的包装器。只是想知道使用它们的灵active。 最佳答案 使用spring的ThreadPoolTask​​Executor的一个附加优势是它非常适合管理和监控(

java - ExecutorService,如何等待所有任务完成

等待ExecutorService的所有任务完成的最简单方法是什么?我的任务主要是计算,所以我只想运行大量的作业——每个核心上一个。现在我的设置如下所示:ExecutorServicees=Executors.newFixedThreadPool(2);for(DataTablesingleTable:uniquePhrases){es.execute(newComputeDTask(singleTable));}try{es.wait();}catch(InterruptedExceptione){e.printStackTrace();}ComputeDTask实现可运行。这似乎可

java - ExecutorService 的线程和线程池命名

假设我有一个使用Executor框架的应用程序Executors.newSingleThreadExecutor().submit(newRunnable(){@Overridepublicvoidrun(){//dostuff}}当我在调试器中运行此应用程序时,会使用以下(默认)名称创建一个线程:Thread[pool-1-thread-1]。如您所见,这并不是非常有用,据我所知,Executor框架并没有提供一种简单的方法来命名创建的线程或线程池。那么,如何为线程/线程池提供名称呢?例如,Thread[FooPool-FooThread]. 最佳答案

Java Timer vs ExecutorService?

我有使用java.util.Timer安排任务的代码。我环顾四周,发现ExecutorService可以做同样的事情。所以这里的这个问题,你有没有使用Timer和ExecutorService来调度任务,一个用一个比另一个用有什么好处?还想检查是否有人使用了Timer类并遇到了ExecutorService为他们解决的任何问题。 最佳答案 根据JavaConcurrencyinPractice:Timer可以对系统时钟的变化敏感,ScheduledThreadPoolExecutor则不敏感。Timer只有一个执行线程,所以长时间运

java - 如何使用 ExecutorService 等待所有线程完成?

我需要一次执行4个任务,如下所示:ExecutorServicetaskExecutor=Executors.newFixedThreadPool(4);while(...){taskExecutor.execute(newMyTask());}//...waitforcompletionsomehow全部完成后如何获得通知?现在我想不出比设置一些全局任务计数器并在每个任务结束时减少它更好的方法,然后在无限循环中监视这个计数器变为0;或获取Futures列表并在无限循环中为所有这些监视器isDone。什么是不涉及无限循环的更好的解决方案?谢谢。 最佳答案

Java:ExecutorService 在特定队列大小后阻止提交

这个问题在这里已经有了答案:ThreadPoolExecutorBlockWhenQueueIsFull?(10个回答)关闭去年。我正在尝试编写一个解决方案,其中单个线程产生可以并行执行的I/O密集型任务。每个任务都有重要的内存数据。所以我希望能够限制当前待处理的任务数量。如果我这样创建ThreadPoolExecutor:ThreadPoolExecutorexecutor=newThreadPoolExecutor(numWorkerThreads,numWorkerThreads,0L,TimeUnit.MILLISECONDS,newLinkedBlockingQueue(ma