【问题标题】:singlethreadexecutor - Multuthreading javasinglethreadexecutor - 多线程 java
【发布时间】:2016-05-13 10:36:50
【问题描述】:

什么时候应该在java中使用singleThreadExecutor?另外,什么时候应该使用cachedThreadpool? 在文档和书籍中都指定 singleThreadExecutor 优于 fixedThreadPool(1),因为它不会像后者那样修改线程数,但在哪些情况下建议或使用 singleThreadExecutor

【问题讨论】:

  • 什么时候想在一个线程上执行?

标签: java multithreading concurrency operating-system


【解决方案1】:

newSingleThreadExecutor() 很好,因为您知道在您的情况下,一个额外的线程在后台执行作业就足够了(意味着队列中不会有很多作业等待)。而且您不需要/不想扩展Thread 或实施Runnable 并自己完成所有工作转移。 Tasks are guaranteed to execute sequentially - 如果您知道并行任务执行可能会导致死锁或数据竞争,这也可能很有用。

cachedThreadpool() - 只需查看源代码

public static ExecutorService newCachedThreadPool() {
    return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                  60L, TimeUnit.SECONDS,
                                  new SynchronousQueue<Runnable>());
}

它按需创建新线程并让它们闲置不超过 1 分钟。正如文档中所说的那样

.. 这些池通常会提高程序的性能 执行许多短暂的异步任务。调用执行 如果可用,将重用以前构造的线程。如果没有现有 线程可用,将创建一个新线程并将其添加到 水池。 ..

但是线程数没有上限,所以我更喜欢用maximumPoolSizeInteger.MAX_VALUE 手动构建池,例如128.

【讨论】:

    猜你喜欢
    • 2018-10-09
    • 1970-01-01
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多