Java核心技术(多线程)三
2011-04-21 10:28
281 查看
执行器
构建一个新的线程是有一定代价的,如果程序中创建了大量的生命期很短的线程,就应该使用线程池。一个线程池中包含许多准备运行的空闲线程。将Runnable对象交给线程池,就会有一个线程调用run方法。当run方法准备退出时,线程不会死亡,而是在池中准备为下一个请求提
供服务。另一个使用线程池的理由是减少并发线程的数目。
Executor有许多静态工厂方法用来构建线程池。
ThreadPoolExecutor类对象实现了ExecutorServiec接口,调用submit方法可以将一个Runnable对象或Callable对象提交给ExecutorService。调用submit时,会得到一个Future对象,可用来查询该任务的状态。当用完一个线程池的时候调用shutdown。该方法启动该池的关闭序列。被关闭的执行器不再接受新的任务。当所有任务都完成以后,线程池中的线程死亡。调用shutdownNow取消尚未开始的所有任务并试图中断正在运行的线程。
newCachedThreadPool:必要时创建新线程;空闲线程被保留60秒。
newFixedThreadPool:包含固定数量的线程。
newSingleThreadExecutor:顺序执行每一个提交的任务,类似于Swing事件分配线程。
ScheduleExecutorService接口具有预订执行或重复执行任务而设计的方法。可以预订Runnable或Callable在初始的延迟之后只运行一
次,也可以预订一个Runnable对象周期性地运行。
newScheduledThreadPool:用于预订执行而构建的固定线程池。
newSingleThreadScheduleExecutor:用于预订执行而构建的单线程"池"。
下面程序演示ThreadPoolExecutor创建线程池的方法:对于newCachedThreadPool,线程全部启动;对于newFixedThreadPool方法,先启动固定数量的线程,每完成一个线程就会启动一个新线程;newSingleThreadExecutor方法,所有的线程均等待上一个线程执行完毕再执行。
public class ExecutorDemo { public static void main(String[] args){ new ExecutorDemo(0); } public ExecutorDemo(int key) { ExecutorService service = null; switch (key) { case 0: service = Executors.newCachedThreadPool(); break; case 1: service = Executors.newFixedThreadPool(5); break; case 2: service = Executors.newSingleThreadExecutor(); break; default: return; } for(int i=0;i<9;i++){ service.execute(new PerThread(i)); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } service.shutdown(); } class PerThread implements Runnable { public PerThread(int count) { this.count = count; } public void run() { try { System.out.println("begin:" + count); Thread.sleep(2000); System.out.println("end:" + count); } catch (InterruptedException e) { e.printStackTrace(); } } private int count = 0; } }
相关文章推荐
- Java 多线程核心技术梳理
- Java多线程之this与Thread.currentThread()的区别——java多线程编程核心技术
- Java多线程编程核心技术(第五章定时器Timer笔记)
- Java多线程核心技术(三):线程间通信
- java多线程编程核心技术6-单例模式与多线程
- 好读书不求甚解(一)Java多线程编程核心技术
- java多线程编程核心技术笔记-脏读
- Java多线程编程核心技术---线程间通信(一)
- 四、java多线程核心技术——synchronized同步方法与synchronized同步快
- java多线程核心技术梳理(附源码)
- 读书笔记——Java多线程编程核心技术
- 看书笔记--JAVA多线程编程核心技术
- Java多线程编程核心技术——生产者消费者模型
- 21.JAVA核心技术—多线程
- 三、java多线程核心技术(笔记)——线程的优先级
- java多线程编程核心技术第一章笔记
- java多线程编程核心技术7-拾遗增补
- Java多线程编程核心技术---线程间通信(二)
- Java核心技术点之多线程
- 学习笔记:Java 多线程编程核心技术(第一章)