jjzjj

executorService

全部标签

java - Java 中带有 invokeAll() 和 Future 的 ExecutorService

手头有以下代码:ExecutorServiceexecutor=Executors.newFixedThreadPool(10);Collectioncollection=newArrayList();for(intn=1;n>futures=executor.invokeAll(collection);for(Futurefuture:futures){future.get();if(future.isDone()){System.out.println("true");}elseSystem.out.println("false");}}catch(Exceptione){e.pr

java - .awaitTermination() 是否在执行程序中完成工作之前建立 happens-before?

我多年来一直存在的问题:在此伪代码中,ExecutorServicesvc=Executors.newFixedThreadPool(3);svc.submit(newRunnable(){/*codeA*/});svc.shutdown();if(svc.awaitTermination(...)){//codeB.awaitTermination()没有被记录为在代码A和B之间建立happens-before。它不是的原因是什么?ExecutorService和concurrentpackagejavadocs定义了happens-before在任务和完成的工作之间它们被提交,但在

java - 关闭 ExecutorService

在Tomcat中,我写了一个ServletContextListener,它将在启动期间启动一个ExecutorService,并在卸载时终止它。我正在关注ExecutorService的javadoc中的示例publicvoidcontextDestroyed(ServletContextEventsce){executor.shutdown();try{executor.awaitTermination(50,TimeUnit.SECONDS);}catch(InterruptedExceptionie){Thread.currentThread().interrupt();}}我

java - 按顺序执行任务但从池中获取线程的 ExecutorService

我正在尝试构建ExecutorService的实现,我们称它为SequentialPooledExecutor,具有以下属性。SequentialPooledExecutor的所有实例共享同一个线程池对同一SequentialPooledExecutor实例的调用按顺序执行。换句话说,实例在开始处理其队列中的下一个任务之前等待当前正在执行的任务的终止。我目前正在自己​​实现SequentialPooledExecutor,但我想知道我是否在重新发明轮子。我查看了ExecutorService的不同实现,例如Executors类提供的实现,但没有找到满足我要求的实现。您是否知道我是否缺少

java - 如何等待产生自己线程的线程?

我正在尝试测试一种在单独的线程中工作的方法,简化后如下所示:publicvoidmethodToTest(){Threadthread=newThread(){@Overridepublicvoidrun(){Clazz.i=2;}};thread.start();}在我的单元测试中,我想测试Clazz.i==2,但我不能这样做,因为我认为断言在线程更改值之前运行。想过换个线程测试一下,然后用join等待,还是不行。中南合作:@Testpublicvoidsscce()throwsInterruptedException{Threadthread=newThread(){@Overri

维护进程池的 Java 库

我正在开发一个需要并发的Java守护进程:一个无限循环,它监听一个作业队列(redis)并将每个作业分配给一个工作人员。工作人员不一定必须返回值。我发现Executors非常有用,我正在使用ThreadPoolExecutor维护多个工作线程。不过,这些工作人员运行第3方代码,需要尽可能隔离运行,避免共享静态属性。我的问题:是否有任何Java库/框架提供类似于执行器的功能,例如:工作人员池自动调整池大小..但是生成进程而不是线程? 最佳答案 我知道您有第3方库,您希望以某种方式独立运行——例如,它们无法访问静态变量。我会runyou

Java ExecutorService 暂停/恢复特定线程

有没有办法使用ExecutorService暂停/恢复特定线程?privatestaticExecutorServicethreadpool=Executors.newFixedThreadPool(5);假设我想停止id=0的线程(假设每个线程都被分配了一个递增的id,直到达到线程池的大小)。一段时间后,比方说,通过按下一个按钮,我想恢复该特定线程并让所有其他线程保持其当前状态,可以暂停或恢复。我在Java文档中发现了一个未完成版本的PausableThreadPoolExecutor。但它不适合我的需要,因为它会恢复池中的所有线程。如果无法使用ExecutorService的默认实

java - 如何在多线程环境下更好的使用ExecutorService?

我需要创建一个库,其中包含同步和异步方法。executeSynchronous()-等到我有结果,返回结果。executeAsynchronous()-立即返回一个Future,如果需要,可以在完成其他事情后对其进行处理。我的库的核心逻辑客户将使用我们的库,他们将通过传递DataKey构建器对象来调用它。然后,我们将使用该DataKey对象构造一个URL,并通过执行它对该URL进行HTTP客户端调用,在我们将响应作为JSON字符串返回后,我们将该JSON字符串发送回我们的客户通过创建DataResponse对象。有些客户会调用executeSynchronous(),有些客户可能会调用

java - 如何停止提交给 ExecutorService 的 Callable?

我正在尝试实现一个示例应用程序来测试Callable和ExecutorService接口(interface)。在我的应用程序中,我已声明:ExecutorServiceexSvc=Executors.newSingleThreadExecutor();然后:Futuretest=exSvc.submit(newCallable(){publicIntegercall(){for(inti=0;i现在我试图在它终止之前停止进程,我正在使用exSvc.shutdownNow()但它不起作用。为了优雅地停止经典的Thread,我通常使用某种条件变量。ExecutorService的常用方法

java - 调用 AsyncTask.cancel() 方法时如何中断 AsyncTask 中的 Callable?

我的Activity有一个AsyncTask,您可以在下面看到其doInBackground方法。我必须向多个服务器发出多个搜索请求,为了加快执行速度,我使用了Java的ExecutorService来发出并发请求。这工作正常,但如果我用调用AsyncTask.cancel();方法,我希望我的AsyncTask停止它正在做的事情并退出>true作为mayInterruptIfRunning参数。这在我需要在我的Activity退出时停止任务的情况下很有用,例如按下“后退”按钮。我读到调用AsyncTask的cancel()方法将阻止调用onPostExecute方法,但是doInBa