线程池
// ExecutorService threadPool = Executors.newFixedThreadPool(3);//固定线程池
// ExecutorService threadPool = Executors.newCachedThreadPool();//缓存线程池,线程数动态变化
// ExecutorServicethreadPool = Executors.newSingleThreadExecutor();//如果线程结束会自动创建新的线程
for(int i=0;i<10;i++){
finalint task = i;
threadPool.execute(new Runnable(){//为线程池中添加线程执行任务
……………………………………
threadPool.shutdown();//关闭线程池
用线程池启动定时器
Executors.newScheduledThreadPool(3).scheduleAtFixedRate(
new Runnable(){
@Override
publicvoid run() {
System.out.println("bombing");
}
},//执行的任务
6, //启动6个时间单位后开始执行
2,//每2个时间单位执行一次
TimeUnit.SECONDS);//时间单位
Future取得的结果类型和Callable返回的结果类型必须一致,通过泛型来实现;例如下面的例子,都是String;
Future<String> future =
threadPool.submit(new Callable<String>(){
@Override
publicString call()throws Exception {
//TODO Auto-generatedmethod stub
return"hello";
}
});
Collable要采用ExecutorService的submit方法提交,返回的future对象可以取消任务。
CompletionService用于提交一组Callable任务,其take方法返回已完成的一个Callable任务对应的Future对象。
ExecutorService threadPool = Executors.newFixedThreadPool(3);
CompletionService<Integer> completionService =newExecutorCompletionService<Integer>(threadPool);
for(int i=1; i<=10; i++ ){
finalint seq = i;
completionService.submit(new Callable<Integer>(){//Callable
@Override
public Integer call()throws Exception {
Thread.sleep(new Random().nextInt(5000));
return seq;//返回结果
}
});
}
for(int i=1; i<=10; i++ ){
System.out.println(completionService.take().get());//获取结果
}
---------------------- android培训、java培训、期待与您交流! ----------------------