代码之家  ›  专栏  ›  技术社区  ›  Faisal Abid

具有1的POLYSIZE的Java线程池

  •  1
  • Faisal Abid  · 技术社区  · 14 年前

    使用池大小仅为1的线程池基本上只是一次又一次地循环一个线程,以供应用程序中的不同用途,是否有意义?而不是做新的线程(runnable())等,然后让垃圾收集器处理线程的删除,我认为只使用一个线程处理不需要一起运行的不同作业会更有效。

    这是我目前正在做的定义1池大小线程池的工作。

        private static int poolSize = 1;
    private static int maxPoolSize = 1;
    private static long keepAliveTime= 10;
    private static final ArrayBlockingQueue<Runnable> queue = new ArrayBlockingQueue<Runnable>(100);
    private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(poolSize, maxPoolSize, keepAliveTime, TimeUnit.SECONDS, queue);
    
    5 回复  |  直到 14 年前
        1
  •  3
  •   Mark    14 年前

    如果单线程线程池与应用程序的运行方式相匹配,那么它没有任何问题。例如,在我工作的一个应用程序中,我们有许多服务需要确保按照到达顺序严格处理数据。为此,我们只需在单线程执行器上执行任务。

    另外,如果需要,使用执行器意味着将来很容易调整线程池参数。

        2
  •  1
  •   Konrad Garus    14 年前

    new Thread(Runnable) 您可以同时执行n个线程。这可能是一个优势,但也可能带来同步问题。

    通过重用一个线程,您将失去并行执行任务的能力,但不会出现同步/并发问题。

        3
  •  1
  •   Riduidel    14 年前

    以这种方式定义单线程池与现代编码标准完全兼容。它的唯一缺点是不允许您并行处理Yhe代码的任何片段。不过,我想这就是你想要的。

        4
  •  1
  •   Tushar Tarkas    14 年前

    使用threadpoolExecutor的一个优点是,一旦创建了线程,在每次使用新线程时,它都会被重用,以防创建新线程。

        5
  •  1
  •   Romain Hippeau    14 年前

    你试过没有线吗?线程没有效率,除非确实需要,并且您需要并行执行许多特定于I/O的操作。如果您要查找的是一个简单的内部消息队列,那么就可以了。