Java核心技术(多线程)三

执行器

构建一个新的线程是有一定代价的,如果程序中创建了大量的生命期很短的线程,就应该使用线程池。一个线程池中包含许多准备运行的空

闲线程。将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方法,所有的线程均等待上一个线程执行完毕再执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值