Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中ManagedExecutorService和ExecutorService的区别是什么_Java_Concurrency - Fatal编程技术网

java中ManagedExecutorService和ExecutorService的区别是什么

java中ManagedExecutorService和ExecutorService的区别是什么,java,concurrency,Java,Concurrency,在我的wildfly java ee应用程序中,我需要将任务提交给executor服务 当前代码如下: ExecutorService作业ExecutorService=Executors.newSingleThreadExecutor() jobExecutorService.submit(新任务(请求)) 在每个请求上,相同的代码段将运行并为单线程执行器提交任务 但是,我不确定新构造的线程是被管理的,还是在JavaEE应用程序中为任何异步流提交任务的正确方式 如果我需要启动一个应由容器管理的

在我的wildfly java ee应用程序中,我需要将任务提交给executor服务

当前代码如下:

ExecutorService作业ExecutorService=Executors.newSingleThreadExecutor()
jobExecutorService.submit(新任务(请求))

在每个请求上,相同的代码段将运行并为单线程执行器提交任务

但是,我不确定新构造的线程是被管理的,还是在JavaEE应用程序中为任何异步流提交任务的正确方式

如果我需要启动一个应由容器管理的线程,我需要使用ManagedExecutorService还是有其他实现


需要一些这方面的知识。

回答标题外的问题:

ManagedExecutorService
是的一部分,而
ExecutorService
是的一部分

这两个接口之间的主要区别在于
ManagedExecutorService
只是一个

ExecutorService的可管理版本

因为您不应该在JavaEE环境中生成任何非托管线程,所以您应该只在那里使用托管线程,而非托管线程对于JavaSE应用程序来说是完全合适的

在JavaEE应用程序中获取
ManagedExecutorService
的正确方法是将
ManagedExecutorService
注入
@Resource
注释

@Resource
ManagedExecutorService managedExecutorService;

要回答标题之外的问题:

ManagedExecutorService
是的一部分,而
ExecutorService
是的一部分

这两个接口之间的主要区别在于
ManagedExecutorService
只是一个

ExecutorService的可管理版本

因为您不应该在JavaEE环境中生成任何非托管线程,所以您应该只在那里使用托管线程,而非托管线程对于JavaSE应用程序来说是完全合适的

在JavaEE应用程序中获取
ManagedExecutorService
的正确方法是将
ManagedExecutorService
注入
@Resource
注释

@Resource
ManagedExecutorService managedExecutorService;

ExecutorService不需要任何web容器,其中as ManagedExecutorService在部署到web服务器的应用程序上下文中使用,其中创建线程池并由容器维护其生命周期。

ExecutorService不需要任何web容器,其中as ManagedExecutorService用于部署到Web服务器的应用程序上下文中,其中创建线程池并由容器维护其生命周期。

标题为
ManagedExecutorService
,但不是问题正文。您遗漏了一部分吗?标题有
ManagedExecutorService
,但没有问题正文。您错过了一部分吗?您好@maio290,在Java EE应用程序中使用ExecutorService会导致创建非托管线程吗?嗯,我想是的。@srinivas是的!我见过JavaEE应用程序使用ExecutorService进行异步执行。所以这不是正确的方法?是的,这不是EE环境中的“正确”方法,因为它抛弃了服务器的线程管理。但是,只要线程没有泄漏任何资源,这可能只会对高负载的系统产生影响。因此,在很多情况下,我认为这种影响是可以忽略的,但是由于它很容易重构,所以对于任何人来说都不应该是一个问题。Hi @ MaI290,java EE应用程序中的ExcutoService是否使用导致非托管线程的创建?我见过JavaEE应用程序使用ExecutorService进行异步执行。所以这不是正确的方法?是的,这不是EE环境中的“正确”方法,因为它抛弃了服务器的线程管理。但是,只要线程没有泄漏任何资源,这可能只会对高负载的系统产生影响。因此,我认为这种影响在很多情况下是可以忽略的,但是因为它很容易重构,所以对任何人来说都不应该是个大问题。