




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第Java详解使用线程池处理任务方法不使用线程池的问题:
如果用户每发起一个请求,后台就创建一个新线程来处理,下次新任务来了又要创建新线程,而创建新线程的开销是很大的,这样会严重影响系统的性能。
线程池常见面试题:
1、临时线程什么时候创建?
新任务提交时发现核心线程都在忙,任务队列也满了,并且还可以创建临时线程,此时才会创建临时线程。
2、什么时候会开始拒绝任务?
核心线程和临时线程都在忙,任务队列也满了,新的任务过来的时候才会开始任务拒绝。
1、线程池处理Runnable任务
importjava.util.concurrent.*;
publicclass多线程_5线程池处理Runnable任务{
publicstaticvoidmain(String[]args){
//线程池处理Runnable任务
//创建线程池对象
publicThreadPoolExecutor(intcorePoolSize,//核心线程数量
intmaximumPoolSize,//线程池可支持的最大线程数量
longkeepAliveTime,//临时线程的最大存活时间
TimeUnitunit,//指定存活时间的单位(秒,分等)
BlockingQueueRunnableworkQueue,//指定任务队列
ThreadFactorythreadFactory,//指定用哪个线程工厂创建线程
RejectedExecutionHandlerhandler)//指定线程忙,任务满了的时候,新任务来了怎么办
ExecutorServicepool=newThreadPoolExecutor(3,5,
6,TimeUnit.SECONDS,newArrayBlockingQueue(5),
Executors.defaultThreadFactory(),newThreadPoolExecutor.AbortPolicy());
//给任务线程池处理
Runnabler=newMyExe();
//三个核心线程
pool.execute(r);
pool.execute(r);
pool.execute(r);
//五个任务队列(不创建临时线程时,会发现只有三个线程,即核心线程量)
pool.execute(r);
pool.execute(r);
pool.execute(r);
pool.execute(r);
pool.execute(r);
//创建临时线程(五个线程,即最大线程量)
pool.execute(r);
pool.execute(r);
//不创建,拒绝策略被触发
//pool.execute(r);
//关闭线程池(开发中一般不会使用)
//pool.shutdownNow();//立即关闭,即使任务没有执行完毕。会丢失任务的!
//pool.shutdown();//会等待任务全部执行完毕后再关闭(建议使用)
classMyExeimplementsRunnable{
publicvoidrun(){
for(inti=1;ii++){
System.out.println(Thread.currentThread().getName()+"正在执行:"+i+"次");
//因为当前案例任务太简单,我们需要创建临时队列需要让三个核心线程忙,五个任务队列排满,所以让线程休眠以增加任务时间
try{
System.out.println(Thread.currentThread().getName()+"任务与线程绑定,线程进入了休眠");
Thread.sleep(1000000);
}catch(Exceptione){
e.printStackTrace();
}
2、线程池处理Callable任务
importjava.util.concurrent.*;
publicclass多线程_5线程池处理Callable任务{
publicstaticvoidmain(String[]args)throwsException{
//线程池处理Callable任务
//创建线程池对象
publicThreadPoolExecutor(intcorePoolSize,//核心线程数量
intmaximumPoolSize,//线程池可支持的最大线程数量
longkeepAliveTime,//临时线程的最大存活时间
TimeUnitunit,//指定存活时间的单位(秒,分等)
BlockingQueueRunnableworkQueue,//指定任务队列
ThreadFactorythreadFactory,//指定用哪个线程工厂创建线程
RejectedExecutionHandlerhandler)//指定线程忙,任务满了的时候,新任务来了怎么办
ExecutorServicepool=newThreadPoolExecutor(3,5,
6,TimeUnit.SECONDS,newArrayBlockingQueue(5),
Executors.defaultThreadFactory(),newThreadPoolExecutor.AbortPolicy());
//给任务线程池处理
//Callablec=newMyCallable2(100);
//pool.submit(c);
FutureStringf1=pool.submit(newMyCallable2(100));
FutureStringf2=pool.submit(newMyCallable2(200));
FutureStringf3=pool.submit(newMyCallable2(300));
FutureStringf4=pool.submit(newMyCallable2(400));
FutureStringf5=pool.submit(newMyCallable2(500));
//Stringstr=f1.get();
//System.out.println(str);
System.out.println(f1.get());
System.out.println(f2.get());
System.out.println(f3.get());
System.out.println(f4.get());
System.out.println(f5.get());
classMyCallable2implementsCallableString{
//v(泛型)
privateintn;
publicMyCallable2(intn){
this.n=n;
//重写call方法
//案例:加法
pub
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物流公司设备采购合同
- 绿色环保产品开发与销售协议
- 软件行业软件开发与技术服务解决方案
- 商业园区物业管理合作协议
- 行政管理心理学知识图谱建立试题及答案
- 行政管理中的人本管理思想试题及答案
- 2025技术授权借贷合同范本
- 2025工程承包劳务合同
- 2025非官方产权房买卖合同范本
- 自考行政管理总结分类试题及答案
- 临床抽血查对制度
- 未届期股权转让后的出资责任归属
- 企业生产计划与安全管理的协同策略研究
- 全国第三届职业技能大赛(化学实验室技术)选拔赛理论考试题库(含答案)
- 数字与图像处理-终结性考核-国开(SC)-参考资料
- 老年患者血液透析的护理
- 山东省烟台市2025届高三第二次模拟考试英语试卷含解析
- 儿童重症患儿护理
- DB15T3644-2024 国有企业阳光采购规范
- 考点12二项分布及其应用(原卷版)
- 《中医经络学说》课件
评论
0/150
提交评论