使用只有1的poolize的ThreadPool是否有意义基本上只是为了应用程序中的不同用途而反复回收一个线程?而不是做新的Thread(Runnable())等然后让垃圾收集器处理线程的删除,我认为将这一个线程用于不需要一起运行的不同作业会更有效。
这就是我目前正在做的定义1个poolize threadpool。
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);
答案 0 :(得分:3)
单线程线程池没有任何问题,如果它适合应用程序的运行方式。例如,在我工作的应用程序中,我们有许多服务,我们需要确保按到达顺序严格处理数据。为此,我们只需在单个线程执行器上执行任务。
同样使用Executors意味着如果需要,将来很容易调整线程池参数。
答案 1 :(得分:1)
使用new Thread(Runnable)
,您可以同时执行N个线程。这可能是一个优势,但它也可能带来同步问题。
重用一个线程后,您将失去并行执行任务的能力,但您可以避免同步/并发问题。
答案 2 :(得分:1)
以这种方式定义单线程池与现代编码标准完全兼容。它的唯一缺点是不让你并行化代码的任何片段。但是,我想这就是你想要的。
答案 3 :(得分:1)
使用ThreadPoolExecutor的一个优点是,一旦创建了线程,它将被重用,而不是每次使用新线程时创建新的线程。
答案 4 :(得分:1)
你没有线程尝试过吗?除非确实需要,否则线程无效并且您需要并行执行大量I / O特定的操作。如果你要找的是一个简单的内部消息队列,那就没关系了。