版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java多线程管理的学习课件第1页/共23页本章目标线程的优先级:优先级概述线程优先级的具体应用线程同步:线程同步的目的线程同步的具体应用线程死锁:产生死锁的必要条件与解决方法wait和notify机制第2页/共23页线程优先级多线程运行时需要定义线程运行的先后顺序线程优先级是用数字表示,数字越大线程优先级越高,取值在(1到10)。默认优先级(为5)。第3页/共23页优先级应用一 publicclassPriThread { publicstaticvoidmain(Stringargs[]) { ThreadAa=newThreadA(); ThreadBb=newThreadB(); a.setPriority(2);//设置优先级别,数值越大优先级越高
b.setPriority(3); a.start(); b.start(); } }第4页/共23页优先级应用二 classThreadAextendsThread { publicvoidrun() { System.out.println("我是线程A"); } }
classThreadBextendsThread { publicvoidrun() { System.out.println("我是线程B"); } }
因为在代码段当中我们把线程B的优先级设置高于线程A,所以运行结果先执行线程B的run()方法后再执行线程A的run()方法。第5页/共23页线程优先级的获得JAVA中获得线程优先级的方法,是通过getPriority()方法来实现的。
publicclassPriThread { publicstaticvoidmain(Stringargs[]) { Threada=newThread(); Threadb=newThread(); intpriA=a.getPriority();//获得优先级的方法
intpriB=b.getPriority(); System.out.println(priA); System.out.println(priB); } }第6页/共23页线程常量设置优先级设置优先级也可以用线程常量。MAX_PRIORITY为最高优先级10;MIN_PRIORITY为最低优先级1;NORM_PRIORITY是默认优先级5。第7页/共23页线程常量设置优先级示例publicclassPriConstant{ publicstaticvoidmain(Stringargs[]) { Threada=newThread(); inttemp=Thread.MAX_PRIORITY; a.setPriority(temp); //设置此线程优先级最高
System.out.println(a.getPriority());
temp=Thread.MIN_PRIORITY; a.setPriority(temp); //设置此线程优先级最低
System.out.println(a.getPriority());
temp=Thread.NORM_PRIORITY; a.setPriority(temp); //将线程优先级设置为默认
System.out.println(a.getPriority()); }}第8页/共23页线程安全问题public
classPiao{public
intnum;publicPiao(intnum){this.num=num;}public
voidsell(Stringname){if(num<=0){return;}System.out.println(name+"卖"+num);try{Thread.sleep(10);}catch(InterruptedExceptione){e.printStackTrace();}num=num-1;}}第9页/共23页安全问题的解决Java中嵌套同步是安全的同步化方法同步块的方式:
voidmethod(){synchronized(this){//}}同步方法:synchronizedvoidmethod(){//}第10页/共23页同步原理synchronized(object){//}钥匙在对象中,而不在代码中。
每个对象有一个钥匙为了执行synchronized()块,线程需要得到对象中的钥匙。一旦获得了钥匙,对象就不再拥有钥匙。如果当线程要执行synchronized()时,钥匙不在对象中,线程就wait。一直到钥匙还到了对象中,才被这个线程拿到。当线程离开synchorized()块,钥匙就还给了对象。第11页/共23页阶段回顾线程优先级的概念?什么是线程同步?如何实现线程同步?实现同步的要点:两个线程对相同的公共资源进行访问。通过同步公共资源的访问方法实现线程安全。第12页/共23页死锁的必要条件与解决方法死锁图,P1、P2表示两个线程,R1、R2表示资源,P1已经占用资源R1而且在等待R2,P2已经占用资源R2而且在等待R1,这时就会产生两个线程互相等待的状态。第13页/共23页wait和notify机制实际应用中,多线程之间常常需要互相协调工作。例如生产者和消费者的问题。在JAVA中,这个机制的实现依赖于wait()/notify()方法。
synchronized(obj) { while(!condition) { obj.wait(); } obj.doSomething(); }
第14页/共23页Wait与notify示例以生产产品面包为例。classBread{private
intid;publicBread(intid){this.id=id;}publicStringtoString(){return"面包"+id;}}第15页/共23页Wait与notify示例面包是放在一个篮子中,篮子满了生产者必须等待,篮子空了,消费者必须等待。两者之间互相要有通讯。classBasket{privateBread[]breads=newBread[6];private
intindex=0;…}第16页/共23页Wait与notify示例生产方法pushpublic
synchronized
voidpush(Breadbread){if(index==breads.length){try{this.wait();}catch(InterruptedExceptione){e.printStackTrace();}}breads[index]=bread;index++;System.out.println("生产了"+bread);this.notify();}第17页/共23页Wait与notify示例消费方法pop()public
synchronized
voidpop(){try{Thread.sleep(1);}catch(InterruptedExceptione1){e1.printStackTrace();}if(index==0){try{this.wait();}catch(InterruptedExceptione){e.printStackTrace();}}index--;Breadbread=breads[index];System.out.println("消费了"+bread);this.notify();}第18页/共23页Wait与notify示例生产者classProducerimplementsRunnable{privateBasketbasket;publicProducer(Basketbasket){this.basket=basket;}public
voidrun(){for(inti=0;i<20;i++){Breadbread=newBread(i);basket.push(bread);}}}第19页/共23页Wait与notify示例消费者classConsumerimplementsRunnable{privateBasketbasket;publicConsumer(Basketbasket){this.basket=basket;}public
voidrun(){for(inti=0;i<20;i++){basket.pop();}}}第20页/共23页Wait与notify示例测试类:public
classTestProducerConsumer{public
static
voidmain(String[]args){Basketbasket=newBasket();Producerproducer=newProducer(basket);Consumerconsume
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024版二手房买卖合同范本(含物业交割流程)3篇
- 2024年度土地抵押担保合同范本3篇
- 2024版创意办公空间租赁与服务合同
- 2024年IT外包服务及运维管理综合合同2篇
- 2024年版:股权转让协议终止合同
- 2024版二手摩托车交易合同附带车辆检测报告及维修记录3篇
- 2024年化工生产车间承包经营合同范本3篇
- 信息化赋能构建品质课堂
- 2024年桶装水专营权合同3篇
- 货运租凭合同范例
- 湖北省武汉市武昌区2021-2022学年八年级上学期期末调研英语试卷(文本版含答案)
- 安徽省合肥市庐阳区2023-2024学年三年级上学期期末数学试卷
- 2023年民航职业技能鉴定《机场控制区通行证》考试全真模拟易错、难点汇编叁(带答案)试卷号:17
- 心肺复苏患者体温管理
- 南京市鼓楼区2023-2024学年八年级上学期期末英语试卷(含答案解析)
- 关于书香家庭阅读情况简介【六篇】
- 心梗合并消化道出血的治疗
- 船舶与海洋工程导论(船舶的基本概念)期末单元测试与答案
- 医学免疫学-课后习题答案
- 不良资产尽职调查工作底稿表
- 金属冶炼安全金属冶炼安全法规与标准
评论
0/150
提交评论