线程池
来源:互联网 发布:python特点 编辑:程序博客网 时间:2024/06/01 07:20
线程池
由于系统启动一个线程的成本是比较高,线程池也就应运而生。
线程池在系统启动时创建大量空闲线程,将Runnable、Callable对象—–>传给线程池—–>线程池会启动里面的线程执行他们的线程执行体(run()或者call()方法)———->当线程执行体执行完成后,线程并不会死亡,而是返回在此成为空闲状态,等待下一次执行。
线程池对象创建
利用Executor工厂类来产生线程池:
newCachedThreadPool():创建一个具有缓存功能的线程池,系统根据需要创建线程,线程会缓存在线程池中 newFixedThreadPool(int nThreads):创建一个可重用的、nThread个固定的线程的线程池 newSingleThreadExecutor():创建包含一个线程的线程池,相当于上面那个法中参数为1时。 newScheduledThreadPool(int corePoolSize):指定线程数量的线程池,可以在指定延迟后执行线程任务 newSingleThreadScheduledExecutor():创建单个线程的线程池,可以指定延迟后执行
注意:
- 前三个方法返回ExecutorService对象,该对象代表一个线程池,他可以执行Runnable和Callable对象代表的线程,后两个方法返回ScheduledExecutorService,他是ExecutorService的子类
- ExecutorService只要线程池中有空闲线程就立刻执行线程任务而ScheduledExecutorService可以在指定延迟或周期性的执行
ExecutorService的API
Future<?> submit(Runnable task):将一个Runnable对象提交给指定线程池,线程池有空闲线程是就立即执行,***Future代表Runnable任务的返回值***,但run()方法没有返回值,所以Future将在Run()结束后返回null.可以通过Future的isDone()、isCancelled()来获取Runnable对象的执行状态<T>Future<T> submit(Runnable task,T result):result显示指定线程结束后的返回值,所以Future对在run()结束后返回result<T>Future<T> submit(Callable<T> task):讲一个Callable对象提交给线程池,程池将在有空闲线程是执行,Future代表call()方法的返回值
ScheduledExecutorService相关API
SCheduledFuture<V> schedule(Callable<V> callable,long delay,TimeUnit unit):指定callable任务将在delay延迟后执行scheduleFuture<?> schedule(Runnable command ,long delay,TimeUnit unit):指定在delay延迟后执行ScheduledFuture<?> scheduleAtFixedRate(Runnable command,long initDelay,long period,TimeUnit unit):指定任务将在initDelay后开始执行,并以period为周期重复执行AcheduledFuture<?> scheduleWithFixedDelay(Runnable command,long iniDelay,long delay,TimeUnit unit):在指定***初始延迟***后首次启动的定期操作,随后在每一次执行完后和下一次开始之间都存在delay延迟。如果任意一次执行遇到异常,就会取消后续执行,否则,只能通过持续显示取消或终止该任务
当一个线程池使用完之后,应该调用线程池的shutdown(),以将启动的线程池序列关闭,调用shutdown()后,线程池将不再接收新的任务,但会将以前提交的任务执行完。当线程池中的任务全部执行完之后,线程池中所有线程就会死亡
- shutdownNow()方法:关闭线程池,停止所有正在执行的活动任务,暂停正在等待的任务,并返回等待任务执行的任务列表
线程池执行线程流程
- 创建Ececutor类的静态工厂方法创建一个ExecutorService(线程池对象)
- 创建Runnable或者Callable实例,作为线程执行任务
- 调用线程池的submit()提交任务
- 当不想提交任何任务时,调用ExecutorService对象的shutdown()关闭线程池
0 0
- 线程与线程池
- 线程池 线程优先级
- Executor线程,线程池
- 线程、多线程、线程池
- IOS-线程、线程池
- Java线程:线程池
- 线程和线程池
- 线程、多线程、线程池
- 线程、多线程、线程池
- 线程(六)线程池
- ExecutorService(线程池)+线程
- 线程和线程池
- 线程&线程池 简略
- 线程和线程池
- 线程池 线程锁
- 线程、线程池总结
- 线程与线程池
- 线程、锁、线程池
- WAMP3.0允许局域网访问
- 欢迎使用CSDN-markdown编辑器
- nikon 协议
- 深入理解Java虚拟机 二、JVM垃圾收集算法与垃圾收集器
- C++头文件的三种标准
- 线程池
- ATSC和DVB数字电视系统的比较
- C#-将数组转换成货币形式的字符串
- CSS3之元素阴影box-shadow
- Construct Binary Tree from Preorder and Inorder Traversal
- PathMeasure的相关文章
- 深入理解javascript原型和闭包(3)——prototype原型
- 解决 Windows 10 中的网络连接问题
- Oracle常用函数系列之八:聚合函数