打字猴:1.700450809e+09
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 ]  [ 下一页 ]