jjzjj

executorService

全部标签

java - 使用单例 ExecutorService 安全吗

在同一个线程池中使用单例ExecutorService和多个CompletionService实例是否安全?CompletionServicecollector=newExecutorCompletionService(threadPool);因此,将有多个线程创建实例,如上所示,“收集器”具有一个单例线程池。 最佳答案 会好的。ExecutorCompletionService的每个实例都维护自己的已完成任务队列,并仅使用底层Executor来处理每个任务。如果完成服务的数量很大,线程池有上限,任务之间可能会在性能上相互干扰,但不

java - Thread 在这里比 Executor 更受青睐吗?

据我了解,Executors有助于处理runnable的执行。例如。当我有几个工作线程完成它们的工作然后终止时,我会选择使用执行程序。执行者将处理创建和终止执行工作线程所需的线程。但是现在我面临着另一种情况。固定数量的类/对象应封装自己的线程。因此线程在创建这些对象时启动,线程将在这些对象的整个生命周期内继续运行。少数对象依次在程序开始时创建并在整个运行时存在。我想在这种情况下线程比执行器更可取,但是当我阅读互联网时,每个人似乎都建议在任何可能的情况下使用执行器而不是线程。有人可以告诉我这里是选择Executors还是Threads,为什么?谢谢 最佳答案

java - 多个 newSingleThreadExecutor 与 ExecutorService 的 newFixedThreadPool

在我的应用程序中,我有4个不同的进程,它们永久运行,中间有一些小的停顿。当前版本的代码在单独的老式线程中执行每个进程:ThreadnlpAnalyzer=newThread(()->{//infinelopforautorestoreincaseofcrash//noinspectionInfiniteLoopStatementwhile(true){try{//thismethodshouldrunpermanently,pausesimplementedinternallyNLPAnalyzer.analyzeNLP(dbCollection);}catch(Exceptione)

java - 如何使用 ExecutorService 轮询直到结果到达

我有一个场景,我必须轮询远程服务器以检查任务是否已完成。完成后,我会进行不同的调用以检索结果。我最初认为我应该使用SingleThreadScheduledExecutor和scheduleWithFixedDelay进行轮询:ScheduledExecutorServiceexecutor=Executors.newSingleThreadScheduledExecutor();ScheduledFuturefuture=executor.scheduleWithFixedDelay(()->poll(jobId),0,10,TimeUnit.SECONDS);publicvoidp

java - 停止 ExecutorService 任务中的无限循环

importjava.util.Arrays;importjava.util.Iterator;importjava.util.List;importjava.util.concurrent.Callable;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;importjava.util.concurrent.Future;importjava.util.concurrent.TimeUnit;classTaskimplementsCallable{publicStringc

Java:需要同步 ExecutorService 吗?

我有一个包含可以在线程之间共享的ExecutorService的类:classMyExecutor{ExecutorServicee=Executors.newSingleThreadExecutor();........publicvoidadd(Runnabler){e.executre(r);}}是否有必要在add方法中同步ExecutorService对象,因为add方法可以从不同线程调用或者ExecutorService线程安全吗? 最佳答案 ExecutorService必须使用线程安全队列(默认情况下使用)。这就是所有

java - 如何保持线程执行直到异步线程返回回调

我的场景如下图所示这里的主线程是我的java应用程序。它打开一个WM线程来执行。WM处理任务执行。他需要调用任务号来执行。假设它包含任务T1,T2,T3T3依赖于T2,T2依赖于T1。WM首先调用RM执行T1的任务执行。T1可以在寻呼中响应,也可以在T1完成后响应。问题是如何等待T1完成然后开始T2的执行。当T1部分完成发送分页数据时如何通知WM。这是简单的场景,但在T1、T2、T3、T4的情况下。T3依赖于T1和T2。代码:publicclassTestAsyncimplementsTaskCallBack{publicstaticExecutorServiceexService=E

Java ExecutorService 和 ThreadPoolExecutor

我遇到了一个奇怪的问题。我正在尝试使用生产者/消费者模型,如果我在这里做错了什么,请提出建议。当我使用固定线程4的ExecutorService时,我从来没有得到任何异常并且程序运行但是当我使用ThreadPoolExecutor时,它给了我异常。无法找出错误是什么!请指教!ExecutorService代码:ArrayBlockingQueuelist=newArrayBlockingQueue(2);ThreadFactorythreadFactory=Executors.defaultThreadFactory();ExecutorServicethreadPool=Execut

java - 在 Java 中创建太多线程

我在我的Java应用程序中使用线程来部分获取数据(使用网络调用)。我有一个方法(不在线程类中),它创建一个给定大小的线程池(最大10-15)并将它们用于网络调用,我多次调用该方法来自一个循环。当我在慢速机器(3GBRAM,Pentium-IV)上运行此应用程序时,一切正常,但当我在iMac(32GBRAM,i7处理器)上运行它时,它创建了太多线程,有时大约2,500次并抛出内存不足错误。我怀疑JVM没有在完成后立即将已完成的线程放回池中,因此它正在创建新线程。即使在iMac上,如果我保持Thread.sleep(1000);在我上面提到的for循环中,一切正常。虽然创建了大约900个线

java - 如何加入使用执行程序服务启动的线程?

在main方法中,子线程开始使用java1.5执行程序服务机制。如何让主线程等待子线程完成?publicclassMainClass{publicstaticvoidmain(String[]args){ExecutorServiceexecutorService=null;try{executorService=Executors.newFixedThreadPool(1);executorService.execute(newTestThread());System.out.println("Mainprogramexited...");}catch(Exceptione){e.p