我有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个高速缓存线程的线程数应该只创建一次,然后该类的任何实例都应该重用这个线程池
答案 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()
即可。这将确保每个类的相同执行程序实例