jjzjj

executorService

全部标签

java - Jboss Java EE 容器和一个 ExecutorService

我有一个独立的java应用程序,它使用ExecutorService来并行处理多个作业ExecutorServicees=Executors.newFixedThreadPool(10);我现在想在EJBbean中重复使用相同的解决方案,但不确定如何正确初始化ThreadPool,因为我通常会离开JavaEE容器来控制所有线程资源。我可以只使用相同的代码还是有其他正确的方法来获取Jboss托管线程池? 最佳答案 在EJB中执行此操作的正确方法是使用ManagedExecutorService,它是ConcurrencyUtilsAP

java - ExecutorService.submit(Task) vs CompletableFuture.supplyAsync(Task, Executor)

要并行或异步运行一些东西,我可以使用ExecutorService:Futuresubmit(Runnabletask,Tresult);或CompletableFutureAPI:staticCompletableFuturesupplyAsync(Suppliersupplier,Executorexecutor);(假设我在这两种情况下都使用同一个Executor)除了返回类型Future与CompletableFuture有什么显着差异。或者什么时候用什么?如果我使用CompletableFuture有什么区别?默认APIExecutor(没有执行者的方法)?

java - ExecutorService.submit(Task) vs CompletableFuture.supplyAsync(Task, Executor)

要并行或异步运行一些东西,我可以使用ExecutorService:Futuresubmit(Runnabletask,Tresult);或CompletableFutureAPI:staticCompletableFuturesupplyAsync(Suppliersupplier,Executorexecutor);(假设我在这两种情况下都使用同一个Executor)除了返回类型Future与CompletableFuture有什么显着差异。或者什么时候用什么?如果我使用CompletableFuture有什么区别?默认APIExecutor(没有执行者的方法)?

java - 将 ThreadLocal 传播到从 ExecutorService 获取的新线程

我正在使用ExecutorService和Future(示例代码here)在具有超时的单独线程中运行进程(线程“生成”发生在AOP方面)。现在,主线程是Resteasy要求。Resteasy使用一个或多个ThreadLocal变量来存储一些上下文信息,我需要在我的Rest方法调用中的某个时间点检索这些信息。问题是,由于Resteasy线程在一个新线程中运行,ThreadLocal变量丢失了。将Resteasy使用的任何ThreadLocal变量“传播”到新线程的最佳方法是什么?似乎Resteasy使用多个ThreadLocal变量来跟踪上下文信息,我想“盲目地”将所有信息转移到新线程。

java - 将 ThreadLocal 传播到从 ExecutorService 获取的新线程

我正在使用ExecutorService和Future(示例代码here)在具有超时的单独线程中运行进程(线程“生成”发生在AOP方面)。现在,主线程是Resteasy要求。Resteasy使用一个或多个ThreadLocal变量来存储一些上下文信息,我需要在我的Rest方法调用中的某个时间点检索这些信息。问题是,由于Resteasy线程在一个新线程中运行,ThreadLocal变量丢失了。将Resteasy使用的任何ThreadLocal变量“传播”到新线程的最佳方法是什么?似乎Resteasy使用多个ThreadLocal变量来跟踪上下文信息,我想“盲目地”将所有信息转移到新线程。

java - 为什么这个线程池不被垃圾收集?

在这个代码示例中,ExecutorService被使用一个并且允许超出范围。publicstaticvoidmain(String[]args){ExecutorServiceexecutorService=Executors.newFixedThreadPool(3);executorService.submit(newRunnable(){publicvoidrun(){System.out.println("hello");}});}一旦executorService超出范围,它应该被收集并最终确定。ThreadPoolExecutor中的finalize()方法调用了shutd

java - 为什么这个线程池不被垃圾收集?

在这个代码示例中,ExecutorService被使用一个并且允许超出范围。publicstaticvoidmain(String[]args){ExecutorServiceexecutorService=Executors.newFixedThreadPool(3);executorService.submit(newRunnable(){publicvoidrun(){System.out.println("hello");}});}一旦executorService超出范围,它应该被收集并最终确定。ThreadPoolExecutor中的finalize()方法调用了shutd

java - 使用 ExecutorService 控制任务执行顺序

我有一个将异步任务委托(delegate)给线程池的进程。我需要确保某些任务按顺序执行。比如任务按顺序到达任务a1、b1、c1、d1、e1、a2、a3、b2、f1任务可以按任何顺序执行,除非存在自然依赖关系,因此必须按该顺序处理a1、a2、a3,方法是分配给同一个线程或阻塞这些线程,直到我知道前一个a#任务已完成。目前它不使用JavaConcurrency包,但我正在考虑更改以利用线程管理。有没有人有类似的解决方案或如何实现这一点的建议 最佳答案 我编写了自己的Executor来保证具有相同键的任务的任务排序。它使用队列映射来处理具

java - 使用 ExecutorService 控制任务执行顺序

我有一个将异步任务委托(delegate)给线程池的进程。我需要确保某些任务按顺序执行。比如任务按顺序到达任务a1、b1、c1、d1、e1、a2、a3、b2、f1任务可以按任何顺序执行,除非存在自然依赖关系,因此必须按该顺序处理a1、a2、a3,方法是分配给同一个线程或阻塞这些线程,直到我知道前一个a#任务已完成。目前它不使用JavaConcurrency包,但我正在考虑更改以利用线程管理。有没有人有类似的解决方案或如何实现这一点的建议 最佳答案 我编写了自己的Executor来保证具有相同键的任务的任务排序。它使用队列映射来处理具

Java ExecutorService : awaitTermination of all recursively created tasks

我使用ExecutorService来执行任务。该任务可以递归地创建提交给同一ExecutorService的其他任务,这些子任务也可以这样做。我现在有一个问题,我想等到所有任务都完成(即所有任务都完成并且他们没有提交新任务)后再继续。我无法在主线程中调用ExecutorService.shutdown(),因为这会阻止ExecutorService接受新任务。如果shutdown没有被调用,那么调用ExecutorService.awaitTermination()似乎什么都不做。所以我有点卡在这里。ExecutorService看到所有工作人员都处于空闲状态并不是那么难,不是吗?我