1700450801
1700450802
newSingleThreadExecutor:单线程池。
1700450803
1700450804
顾名思义就是一个池中只有一个线程在运行,该线程永不超时。而且由于是一个线程,当有多个任务需要处理时,会将它们放置到一个无界阻塞队列中逐个处理,它的实现代码如下:
1700450805
1700450806
public static ExecutorService newSingleThreadExecutor(){
1700450807
1700450808
return new FinalizableDelegatedExecutorService(new ThreadPoolExecutor(1,1,0L,
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
[
上一页 ]
[ :1.700450801e+09 ]
[
下一页 ]