每个类的实例都有线程池

时间:2014-10-16 17:40:31

标签: java multithreading java.util.concurrent

我有A类,在运行时会有多个类的实例。

每个实例是否使用以下代码创建5个线程?

public class A {

private void someMethod1(){

getPool();

}

private static ExecutorService getPool() {

        return (ExecutorService) new ThreadPoolExecutor(0, 5,
                60L, TimeUnit.SECONDS,
                new SynchronousQueue<Runnable>());

    }
}

要求:

如果有9个A类实例,将会创建9 * 5 = 45个线程?我正在寻找一个解决方案,其中例如50个高速缓存线程的线程数应该只创建一次,然后该类的任何实例都应该重用这个线程池

1 个答案:

答案 0 :(得分:1)

我认为你要找的是一个单身人士,用getter创建一个新的静态类来获取执行者服务,并在任何你喜欢的地方调用它:

public class MyExecutors {

  private static ExecutorService ex;

  public static synchronized ExecutorService getExecutor(){
    if(ex == null){
        ex = new ThreadPoolExecutor(0, 50, 60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>());
    }
    return ex;
  }
}

现在只需在所有实例中使用MyExecutors.getExecutor()即可。这将确保每个类的相同执行程序实例