Java 遗嘱执行人的使用和费用处罚
关于Executors对内存和时间性能的最佳利用率的一些问题:Java 遗嘱执行人的使用和费用处罚,java,concurrency,Java,Concurrency,关于Executors对内存和时间性能的最佳利用率的一些问题: 使用本产品是否会产生任何成本罚款 ExecutorService e = Executors.newSingleThreadExecutor(); e.execute(callable) e.shutdown() 与之相比: new Thread(runnable).start() 如果一个可调用的不是一个长实例,并且不会有多个实例在运行,那么可以使用(1)中的代码吗?还是最好将ExecutorService作为静态实例并在调
ExecutorService e = Executors.newSingleThreadExecutor();
e.execute(callable)
e.shutdown()
与之相比:
new Thread(runnable).start()
可调用的不是一个长实例,并且不会有多个实例在运行,那么可以使用(1)中的代码吗?还是最好将ExecutorService
作为静态实例并在调用之间重用
ExecutorService的要点是在固定数量的线程之间共享许多任务。创建ExecutorService来运行单个任务是浪费开销的
新建线程(runnable).start()
应该总是比创建ExecutorService快,因为ExecutorService无论如何只会创建线程,但会增加跟踪线程的开销
使用该软件会有任何成本损失吗
与之相比:
new Thread(runnable).start()
是的,有一个“惩罚”:创建ExecutorService
的成本很可能更高,因为它还为您提交的任务创建了一个队列,如果一个线程在关闭之前失败,那么失败的线程将被另一个线程替换,以便运行任何后续任务(因此有相当多的逻辑)。但是,您可能不希望每次运行任务时都创建一个ExecutiveService
。。。这可能不是ExecutorService
的最佳用途(下一个问题将对此进行详细介绍)
如果一个可调用的代码不是很长,并且不会有多个实例在运行,那么可以使用-1-?或者最好将ExecutorService作为静态服务并在调用之间重用
建议将ExecutorService
用作线程池,您可以在其中保留ExecutorService
,只要有任务要提交,您就可以向其提交任务。它可以是静态的,也可以只是一个普通的成员,这与您的需求/设计无关,并且高度依赖于您的需求/设计。即使您一次只运行一个实例(即,您只有一个单线程执行器),使用ExecutorService
仍然更有效,因为它重用线程,因此从长远来看,它比为您提交的每个任务创建新线程的成本更低
如果我有几个任务。。。每个任务都有执行器服务存在问题吗?还是最好有一个集中的执行器服务
这没有问题,但是效率很低,所以只需要一个集中的执行器服务
如果执行器不是shutdown(),哪些资源会消耗它
我认为您不应该特别担心这一点,特别是如果您在正确的上下文中使用Executor
,它将是最小的
new Thread(runnable).start()