本帖最后由 syusouki 于 2015-9-29 22:13 编辑
1.当使用继承Thread的方式实现线程,如果想反复的使用此线程,不能多次调用start();可以多次实例化此类的对象,然后再启动线程。
2.如果线程的启动,或者构造比较耗时,那么就大大的影响效率;
3.JDK5之后,提供了一个"线程池",这个"线程池"可以缓存一些"线程对象",如果需要再次使用时,无需重复构造,直接从"池"中取出线程对象使用即可;
4.JDK5新增了一个Executors工厂类来产生线程池,有如下几个方法
public static ExecutorService newCachedThreadPool():创建一个可根据需要创建新线程的线程池
public static ExecutorService newFixedThreadPool(int nThreads):创建一个可重用固定线程数的线程池
public static ExecutorService newSingleThreadExecutor():创建一个使用单个worker线程的ExecutorService对象,
该对象表示一个线程池,可以执行Runnable对象或者Callable对象代表的线程。它提供了如下方法:
Future<?> submit(Runnable task)
<T> Future<T> submit(Callable<T> task)
1.获取一个线程池对象:
ExecutorService service = Executors.newFixedThreadPool(2);
2.调用线程池的submit()方法执行线程:
3.接收返回值:
Future<Integer> result = service.submit(new MyCallable());
Integer val = result.get();
|
|