Java 遗嘱执行人的使用和费用处罚

Java 遗嘱执行人的使用和费用处罚,java,concurrency,Java,Concurrency,关于Executors对内存和时间性能的最佳利用率的一些问题: 使用本产品是否会产生任何成本罚款 ExecutorService e = Executors.newSingleThreadExecutor(); e.execute(callable) e.shutdown() 与之相比: new Thread(runnable).start() 如果一个可调用的不是一个长实例,并且不会有多个实例在运行,那么可以使用(1)中的代码吗?还是最好将ExecutorService作为静态实例并在调

关于Executors对内存和时间性能的最佳利用率的一些问题:

  • 使用本产品是否会产生任何成本罚款

    ExecutorService e = Executors.newSingleThreadExecutor();
    e.execute(callable)
    e.shutdown()
    
    与之相比:

    new Thread(runnable).start()
    
  • 如果一个
    可调用的
    不是一个长实例,并且不会有多个实例在运行,那么可以使用(1)中的代码吗?还是最好将
    ExecutorService
    作为静态实例并在调用之间重用

  • 如果我有(2)中描述的多个任务,那么每个任务都有自己的executor服务存在问题吗?或者最好有一个集中的executor服务?(我说的是一个客户端应用程序,通常不会有多个这样的任务在运行)

  • 如果不是shutdown(),执行器会消耗哪些资源


  • ExecutorService的要点是在固定数量的线程之间共享许多任务。创建ExecutorService来运行单个任务是浪费开销的

    新建线程(runnable).start()
    应该总是比创建ExecutorService快,因为ExecutorService无论如何只会创建线程,但会增加跟踪线程的开销

    使用该软件会有任何成本损失吗

    与之相比:

    new Thread(runnable).start()
    
    是的,有一个“惩罚”:创建
    ExecutorService
    的成本很可能更高,因为它还为您提交的任务创建了一个队列,如果一个线程在关闭之前失败,那么失败的线程将被另一个线程替换,以便运行任何后续任务(因此有相当多的逻辑)。但是,您可能不希望每次运行任务时都创建一个
    ExecutiveService
    。。。这可能不是
    ExecutorService
    的最佳用途(下一个问题将对此进行详细介绍)

    如果一个可调用的代码不是很长,并且不会有多个实例在运行,那么可以使用-1-?或者最好将ExecutorService作为静态服务并在调用之间重用

    建议将
    ExecutorService
    用作线程池,您可以在其中保留
    ExecutorService
    ,只要有任务要提交,您就可以向其提交任务。它可以是静态的,也可以只是一个普通的成员,这与您的需求/设计无关,并且高度依赖于您的需求/设计。即使您一次只运行一个实例(即,您只有一个单线程执行器),使用
    ExecutorService
    仍然更有效,因为它重用线程,因此从长远来看,它比为您提交的每个任务创建新线程的成本更低

    如果我有几个任务。。。每个任务都有执行器服务存在问题吗?还是最好有一个集中的执行器服务

    这没有问题,但是效率很低,所以只需要一个集中的执行器服务

    如果执行器不是shutdown(),哪些资源会消耗它

    我认为您不应该特别担心这一点,特别是如果您在正确的上下文中使用
    Executor
    ,它将是最小的

    new Thread(runnable).start()