版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三讲第三讲线程管理线程管理 线程的优先级:优先级概述线程优先级的具体应用线程同步:线程同步的目的线程同步的具体应用线程死锁:产生死锁的必要条件与解决方法wait和notify机制 线程优先级线程优先级 多线程运行时需要定义线程运行的先后顺序线程优先级是用数字表示,数字越大线程优先级越高,取值在(1到10)。默认优先级(为5)。优先级应用一优先级应用一 public class PriThreadpublic static void main(String args )ThreadA a=new ThreadA();ThreadB b=new ThreadB();a.setPriority(2
2、);/设置优先级别,数值越大优先级越高b.setPriority(3);a.start();b.start();优先级应用二优先级应用二class ThreadA extends Threadpublic void run()System.out.println(我是线程A);class ThreadB extends Threadpublic void run()System.out.println(我是线程B); 因为在代码段当中我们把线程B的优先级设置高于线程A,所以运行结果先执行线程B的run()方法后再执行线程A的run()方法。 线程优先级的获得线程优先级的获得 JAVA中获得线程
3、优先级的方法,是通过getPriority()方法来实现的。public class PriThreadpublic static void main(String args )Thread a=new Thread();Thread b=new Thread();int priA=a.getPriority();/获得优先级的方法int priB=b.getPriority();System.out.println(priA);System.out.println(priB);线程常量设置优先级线程常量设置优先级设置优先级也可以用线程常量。MAX_PRIORITY为最高优先级10;MIN_P
4、RIORITY为最低优先级1;NORM_PRIORITY是默认优先级5。线程常量设置优先级示例线程常量设置优先级示例public class PriConstantpublic static void main(String args )Thread a=new Thread();int temp=Thread.MAX_PRIORITY;a.setPriority(temp);/设置此线程优先级最高System.out.println(a.getPriority();temp=Thread.MIN_PRIORITY;a.setPriority(temp);/设置此线程优先级最低System.o
5、ut.println(a.getPriority();temp=Thread.NORM_PRIORITY;a.setPriority(temp);/将线程优先级设置为默认 System.out.println(a.getPriority();线程安全问题线程安全问题public class Piao public int num;public Piao(int num)this.num = num;public void sell(String name)if(num=0)return;System.out.println(name+卖+num);try Thread.sleep(10); c
6、atch (InterruptedException e) e.printStackTrace();num=num-1;安全问题的解决安全问题的解决Java中嵌套同步是安全的同步化方法同步块的方式: void method() synchronized(this) / 同步方法:synchronized void method() / 同步原理同步原理synchronized (object) / 钥匙在对象中,而不在代码中。 每个对象有一个钥匙 w为了执行synchronized()块,线程需要得到对象中的钥匙。一旦获得了钥匙,对象就不再拥有钥匙。 w如果当线程要执行synchronized
7、()时,钥匙不在对象中,线程就wait。一直到钥匙还到了对象中,才被这个线程拿到。 w当线程离开synchorized()块,钥匙就还给了对象。 阶段回顾阶段回顾线程优先级的概念?什么是线程同步?如何实现线程同步?实现同步的要点:两个线程对相同的公共资源进行访问。通过同步公共资源的访问方法实现线程安全。死锁的必要条件与解决方法死锁的必要条件与解决方法死锁图,P1、P2表示两个线程,R1、R2表示资源,P1已经占用资源R1而且在等待R2,P2已经占用资源R2而且在等待R1,这时就会产生两个线程互相等待的状态。 wait和和notify机制机制 实际应用中,多线程之间常常需要互相协调工作。例如生产
8、者和消费者的问题。 在JAVA中,这个机制的实现依赖于wait()/notify()方法。synchronized(obj) while(!condition) obj.wait();obj.doSomething(); Wait与与notify示例示例 以生产产品面包为例。class Breadprivate int id;public Bread(int id)this.id = id;public String toString() return 面包+id;Wait与与notify示例示例面包是放在一个篮子中,篮子满了生产者必须等待,篮子空了,消费者必须等待。两者之间互相要有通讯。cl
9、ass Basketprivate Bread breads = new Bread6;private int index = 0;Wait与与notify示例示例生产方法pushpublic synchronized void push(Bread bread)if(index = breads.length)try this.wait(); catch (InterruptedException e) e.printStackTrace();breadsindex = bread;index+;System.out.println(生产了+bread);this.notify();Wait
10、与与notify示例示例消费方法pop()public synchronized void pop()try Thread.sleep(1); catch (InterruptedException e1) e1.printStackTrace();if(index = 0)try this.wait(); catch (InterruptedException e) e.printStackTrace();index-;Bread bread = breadsindex;System.out.println(消费了+bread);this.notify();Wait与与notify示例示例生
11、产者class Producer implements Runnableprivate Basket basket;public Producer(Basket basket)this.basket = basket;public void run() for(int i=0;i20;i+)Bread bread = new Bread(i);basket.push(bread);Wait与与notify示例示例消费者class Consumer implements Runnableprivate Basket basket;public Consumer(Basket basket)thi
12、s.basket = basket;public void run() for(int i=0;i20;i+)basket.pop();Wait与与notify示例示例测试类:public class TestProducerConsumer public static void main(String args) Basket basket = new Basket();Producer producer = new Producer(basket);Consumer consumer = new Consumer(basket);Thread thread = new Thread(producer);Thread t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 地震灾后重建施工管理方案
- 储能电站实时数据分析
- 城市更新地下空间开发方案
- 热固性复合材料回收和综合利用项目技术方案
- 企业环境监测与治理技术方案
- 职业技能培训课程设计标准与实施考试
- 2026广东韶关市翁源第二批招聘教师暨选聘教师补充30人考试备考试题及答案解析
- 2026年甘肃省张掖市临泽县招募文化人才专项志愿者10人考试参考题库及答案解析
- 2025-2026学年人教版七年级美术上册色彩基础测试卷(含答案)
- 2026湖北武汉海事职业学院招聘5人考试备考试题及答案解析
- 校服采购备案制度
- 2026届广州一模语文试题+答案
- 2026工银安盛春季校园招聘考试参考题库及答案解析
- 电力行业安全管理与监督指南(标准版)
- 2026年芜湖市镜湖科创运营管理有限公司招聘工作人员5名笔试参考题库及答案解析
- 2026广东佛山大学辅导员招聘6人笔试备考试题及答案解析
- 护患沟通实践指南(2025年版)
- 2025年宁波职业技术学院单招职业技能测试题库带答案解析
- 江西九江市2026届高三上学期第一次高考模拟统一考试英语试题(试卷+解析)
- 企业领导任职声明及承诺书
- 福建省宁德市三校2025-2026学年上学期高三1月月考数学试卷(含答案)
评论
0/150
提交评论