我正在更新一些很久没有接触过的旧Java代码。我的问题涉及到现在做线程池的最佳方式是什么?
以前我使用并发util类的:
import EDU.oswego.cs.dl.util.concurrent.BoundedBuffer;
import EDU.oswego.cs.dl.util.concurrent.PooledExecutor;
然而,我不认为这是我现在更新到Java7的最佳方式。
这是我的代码片段:
Static PooledExecuter pooledExecuter = null;
private ThreadPoolExample(Int initialCapactiy, int initThreadPoolSize,
int maxThreadPoolSize, int minThreadPoolSize,
int time) throws Exception
{
pooledExecuter = new PooledExecuter(new BoundedBuffer(initialCapactiy), maxThreadPoolSize);
pooledExecuter.setMinimumPoolSize(minThreadPoolSize);
pooledExecuter.setKeepAliveTime(1000 * time);
pooledExecuter.waitWhenBlocked();
pooledExecuter.createThreads(initThreadPoolSize)
//setup thread
this.thread = new Thread(this);
this.thread.setName("threadtest");
try
{
this.thread.setDaemon(this)
}
catch (Exception e)
{
}
}
在我的run方法中,我还调用pooledExecuter.execute(新的TestClass(
基本上,我想知道我现在应该用哪种方式来处理线程池?
如有任何帮助,我们将不胜感激。
我不确定BoundedBuffer
是如何发挥作用的,但我相信你只需要说:
threadPool = Executors.newFixedThreadPool(maxThreadPoolSize, new ThreadFactory() {
public Thread newThread(Runnable r) {
Thread thread = new Thread(r);
thread.setDaemon(true);
return thread;
}
});
CCD_ 2可以由使用CCD_ 4在内部创建的CCD_。
如果您想要对保持活动设置(etc(进行更细粒度的控制,那么您可以直接调用ThreadPoolExecutor
构造函数。
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory)
类似于:
threadPool = new ThreadPoolExecutor(initialCapactiy, maxThreadPoolSize,
time, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(),
new ThreadFactory() {
public Thread newThread(Runnable r) {
Thread thread = new Thread(r);
thread.setDaemon(true);
return thread;
}
});
您可能应该使用ExecutorService
,它可以从Executors
中的众多方便方法之一构造,包括指定有界队列等用于插入项的方法。
我在代码中看到许多拼写错误,例如Static
关键字(大写S(无效,PooledExecutor
拼写不同。你确定它能编译吗?
您可以使用Java并发Utils。查看Executor框架,了解如何使用线程池。
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/Executor.htmlhttp://www.vogella.com/articles/JavaConcurrency/article.html#threadpools
或者,如果您正在使用Spring,请查看TaskExecutor。
http://static.springsource.org/spring/docs/3.0.x/reference/scheduling.html
如果您在JavaEE应用程序服务器中运行代码,您可能需要查看服务器的文档,以找到使用线程池的最佳方式。