1700450809
1700450810
TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()));
1700450811
1700450812
}
1700450813
1700450814
它的使用方法也非常简单,下面是简单的示例:
1700450815
1700450816
public static void main(String[]args)throws Exception{
1700450817
1700450818
//创建单线程执行器
1700450819
1700450820
ExecutorService es=Executors.newSingleThreadExecutor();
1700450821
1700450822
//执行一个任务
1700450823
1700450824
Future<String>future=es.submit(new Callable<String>(){
1700450825
1700450826
public String call()throws Exception{
1700450827
1700450828
return””;
1700450829
1700450830
}
1700450831
1700450832
});
1700450833
1700450834
//获得任务执行后的返回值
1700450835
1700450836
System.out.println(“返回值:”+future.get());
1700450837
1700450838
//关闭执行器
1700450839
1700450840
es.shutdown();
1700450841
1700450842
}
1700450843
1700450844
newCachedThreadPool:缓冲功能的线程池。
1700450845
1700450846
建立了一个线程池,而且线程数量是没有限制的(当然,不能超过Integer的最大值),新增一个任务即有一个线程处理,或者复用之前空闲的线程,或者新启动一个线程,但是一旦一个线程在60秒内一直是出于等待状态时(也就是1分钟没工作可做),则会被终止,其源代码如下。
1700450847
1700450848
public static ExecutorService newCachedThreadPool(){
1700450849
1700450850
return new ThreadPoolExecutor(0,Integer.MAX_VALUE,60L, TimeUnit.SECONDS, new
1700450851
1700450852
SynchronousQueue<Runnable>());
1700450853
1700450854
}
1700450855
1700450856
这里需要说明的是,任务队列使用了同步阻塞队列,这意味着向队列中加入一个元素,即可唤醒一个线程(新创建的线程或复用池中空闲线程)来处理,这种队列已经没有队列深度的概念了。
1700450857
1700450858
newFixedThreadPool:固定线程数量的线程池。
[
上一页 ]
[ :1.700450809e+09 ]
[
下一页 ]