2010-07-21 67 views
1

使用线程池的池大小仅为1基本上只是一遍又一遍地重复使用一个线程以用于应用程序中的不同用途是否合理?而不是做新的线程(Runnable())等,然后让垃圾收集器处理线程的删除,我认为只使用一个线程用于不需要一起运行的不同作业会更高效。池大小为1的Java线程池1

这是我目前正在做的事情来定义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); 
+0

而且您知道使用不同java库中并发线程的所有用法吗?单独保留默认值,这是有原因的。 – Oded 2010-07-21 08:04:07

回答

3

单线程线程池没有问题,只要它符合应用程序的功能。例如,在我工作的应用程序中,我们有许多服务,我们需要确保数据严格按照到达顺序进行处理。为此,我们只需在单个线程执行程序上执行任务。

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

+0

感谢您的意见!我对我现在所做的事充满信心。 感谢大家的评论! – 2010-07-23 23:58:12

1

随着new Thread(Runnable)你可以同时执行N个线程。这可能是一个优点,但它也可能带来同步问题。

重复使用一个线程会失去并行执行任务的能力,但您不会遇到同步/并发问题。

+0

那么在程序进行API调用很多,并解析JSON,但我不需要做并行调用(即一次多个API调用,这就是为什么我诉诸这种技术)。 – 2010-07-21 08:30:38

1

以这种方式定义单线程池与现代编码标准完美兼容。它有唯一的缺点,就是不让你并行化代码的任何片段。但是,我想这就是你想要的。

1

使用ThreadPoolExecutor的优势之一就是一旦创建线程,它就会被重用,因为每次使用新线程时都会创建新线程。

1

您是否尝试过没有线程?线程没有效率,除非真正需要,你需要并行处理大量I/O特定的东西。如果你正在寻找的是一个简单的内部消息队列,那么它很好。