正在将旧的线程池代码升级到新的并发类



我正在更新一些很久没有接触过的旧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应用程序服务器中运行代码,您可能需要查看服务器的文档,以找到使用线程池的最佳方式。

Java 7引入了ForkJoinPool。关于何时在此处使用的文章。

相关内容

  • 没有找到相关文章

最新更新