jjzjj

executorService

全部标签

java - 多线程环境中的基准测试

我正在学习多线程,发现在多线程环境中Object.hashCode速度变慢,因为它需要两倍的时间来计算运行4个线程的默认哈希码>对于相同数量的对象,对比1个线程。但根据我的理解,并行执行此操作应该花费类似的时间。您可以更改线程数。每个线程都有相同数量的工作要做,所以你希望在我的四核机器上运行4个线程可能花费与运行单个线程相同的时间。我看到4倍大约2.3秒,但1倍0.9秒。我的理解是否有任何差距,请帮助我理解这种行为。publicclassObjectHashCodePerformance{privatestaticfinalintTHREAD_COUNT=4;privatestatic

java - Executor 代替 ExecutorService 有没有什么场景。 Executor 接口(interface)背后的意图?

我想知道是否有任何理由使用Executor而不是ExecutorService。据我所知,JDK中没有实现Executor接口(interface),它也不是ExecutorService,这意味着您必须关闭该服务,以便没有内存泄漏。您无法关闭Executor,但可以使用ExecutorService来关闭它。那么,有没有什么场景可以使用类似的东西:privatefinalExecutor_executor=Executors.newCachedThreadPool();Executor接口(interface)背后的意图是什么?示例表示赞赏。 最佳答案

java - java如何区分Lambda中的Callable和Runnable?

我得到了这个小代码来测试Callable。但是,我发现编译器如何知道Lambda是用于可调用接口(interface)还是可运行接口(interface)非常令人困惑,因为它们的函数中都没有任何参数。然而,IntelliJ显示Lambda使用Callable的代码。publicclassApp{publicstaticvoidmain(String[]args)throwsInterruptedException{ExecutorServiceexecutorService=Executors.newCachedThreadPool();executorService.submit((

java - 如何对在执行程序服务中运行的代码片段进行单元测试,而不是等待 Thread.sleep(time)

如何对在执行程序服务中运行的代码进行单元测试?在我的情况下,publicvoidtest(){RunnableR=newRunnable(){@Overridepublicvoidrun(){executeTask1();executeTask2();}};ExecutorServiceexecutorService=Executors.newSingleThreadExecutor();executorService.submit(R);}当我进行单元测试时,我想对方法执行进行一些验证。我在执行程序服务中执行它,因为它进行一些网络操作。在我的单元测试中,我必须等到此方法执行完毕。有没

java - 两个ExecutorServices可以共享一个线程池吗?

我有一组记录要处理,处理可以并行进行,所以我创建了一个ExecutorService(通过Executors#newCachedThreadPool())。单个记录的处理本身由可并行化的步骤组成,因此我想使用另一个ExecutorService。有没有一种简单的方法可以让这个新的使用相同的底层线程池?它甚至是可取的吗?谢谢。 最佳答案 回答您的问题:不,两个ExecutorService对象不能共享一个线程池。但是,您可以在对象之间共享一个ExecutorService,或者根据需要创建多个Executor,但不太推荐这样做。最佳解

java - java中的Executor服务-->如何将单线程代码转换为使用executor

如果这个问题听起来很愚蠢,请原谅我——我才刚刚开始使用Executor。我有一个以这种方式使用线程的现有Java应用程序——基本上使用独立线程——privateThreadspawnThread(){Threadt=newThread(){StringtaskSnap=task.toString();publicvoidrun(){try{println(task.run(null));}catch(InterruptedExceptione){println("ITC-"+taskSnap+"interrupted");}}};returnt;}从上面可以看出,该函数返回一个新线程。

java - ScheduledExecutorService 一线程多任务

我是ExecutorService的新手,想知道为什么以下代码可以正确打印“1015”,即使我只创建了一个线程来处理超时?为什么我可以多次调用schedule而不会在单个线程执行器上取消先前的任务?importjava.util.concurrent.Executors;importjava.util.concurrent.ScheduledExecutorService;importjava.util.concurrent.TimeUnit;publicclassTestExecutorServiceimplementsRunnable{publicstaticScheduledEx

Java:它创建的定时器和线程

我有这个问题:我有一个计时器。它使用scheduleAtFixedRate创建一个新的Timer任务。在那个定时器任务中有一些代码,可能需要一段时间才能完成。如何确保前一个任务尚未完成时Timer不会创建新任务?谢谢 最佳答案 我的回答是不要使用Timer,它已经过时了。自Java5以来,Timer已被ScheduledExecutorService取代,后者更加灵活且易于使用。您可以更好地控制调度程序的工作方式,Timer无法提供这种控制。您使用Executors创建一个工厂类,它有很多工厂方法。您应该查看的是newSingleT

java - 超时后中止 countDownLatch.await()

我正在使用ExecutorService来实现一个3线程池,并使用CountDownLatch来监视所有线程的完成,以进行进一步处理。ExecutorServicethreadExecutor=Executors.newFixedThreadPool(3);CountDownLatchcountDownLatch=newCountDownLatch(3);AuthorisationHistoryTasktask1=newAuthorisationHistoryTask(commonDataThread,countDownLatch);PreAuthHistoryTasktask2=ne

java - HashedWheelTimer vs ScheduledThreadPoolExecutor 以获得更高的性能

如果您需要在一台机器上的jvm中尽可能快地安排大量(非阻塞)任务,我正在考虑使用什么计时器实现。我研究了ScheduledThreadPoolExecutor和HashedWheelTimer来源(+wheeltimergeneraldocs),这里是基本差异(N-到目前为止所有未完成的计划任务的数量,C-车轮尺寸):调度线程池执行器O(logN)添加新任务每个计时器滴答的时间复杂度为O(1)(但每个任务滴答一次,所以总共有N个)O(logN)取消任务每个滴答/任务锁定HashedWheelTimerO(1)添加新任务O(m)每个计时器滴答声(m~N/C,其中C>512大约),所以~C