一 Future,Callable
1) Callable,可以返回一个值
Future负责保存异步计算的结果。当使用future对象时,就可以启动一个计算,把计算放到一个线程中。
当这个县城完成计算以后,用get就能得到值
Class Call implements Callable<Integer>{
public Integer call();
}
调用时:
Call c = new Call();
FutureTask<Integer> ft = new FutureTask<Integer>(c);
Thread t = new Thread(ft);
t.start();
取得Call返回的值:
ft.get();
二 线程池
1) newCachedThreadPool
构造一个线程池,对于每个任务,如果有空闲线程可以用,立即让他执行任务。否则创建一个新的线程。
2) newFixedThreadPool
方法创建一个大小固定的线程池。如果提交的任务大于空闲线程数,那么得不到服务的任务将被置于队列中。
3) newSingleThreadExecutor
大小为1的线程池,由一个线程执行所有任务,一个接一个。
这三个方法返回了一个实现ExecutorService接口的ThreadPollExecutor类的对象
可以用以下方法讲一个Runnable对象提交给ExecutorService
Future<?> submit(Runnable task)
Future对象可以用来查询任务状态
三 如何使用连接池
1) 调用Executors类中静态的newCachedThreadPool,或者newFixedThreadPool方法创建ThreadPollExecutor
ExecutorService pool = Executors.newCachedThreadPool();
Call c = new Call()
2) 调用submit方法往线程池添加Runnable对象
pool.submit(c);
3) 如果希望能够取消任务,那就要保存好返回的Future对象
Future<Integer> f = pool.submit(c);
4) 当不想再提交任务时调用shutdown方法
pool.shutdown();
关于简单的线程池
最新推荐文章于 2022-05-13 11:45:44 发布