- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三次线程实验:
一. 实验目的及实验环境
实验目的:1.理解JAVA中线程的同步和死锁
2.掌握线程同步和互斥
实验环境:eclipse 4.4
二. 实验内容
编程实现隧道通车问题。内容如下:有一条隧道,同时允许一辆车通行,隧道两端各有多辆车等待通过,车辆只能等到隧道空闲才能被运行进入隧道。一旦隧道中有车辆,则禁止其他车辆通过。
三.方案设计
1.定义类Test,Car,CarType,Tunnel类
2.在Test类中创建一个隧道Tunnel和多个车辆,观察结果
四.测试数据及运行结果
1.正常测试数据(3组)及运行结果;
2.非正常测试数据(2组)及运行结果。
无
五.总结
1.实验过程中遇到的问题及解决办法;
①中没有明确表示需要进行异常抛出很有可能就会忘记这个题目存在的问题。所以平常程序设计时,应该多考虑不同的情况,防止程序出现不可逆的漏洞。
②对程序进行同步时,notify()方法会唤醒等待队列中的随机的一个线程,而notifyAll()方法会唤醒等待队列中的全部线程
对设计及调试过程的心得体会。
①Java中的每个对象都有一个lock,当访问某个对象的synchronized方法时,该对象就会被上锁(注意,是对象,不是方法,假如你在这个类中定义了多个方法,如果你的线程访问到了其中的任意一个synchronized方法,那么其它的就暂时不能被访问了,必须等到该对象被解锁以后,即方法执行结束才行)。解锁的意思是值线程执行该方法完毕,或者说过程中抛出了异常。
②wait,notify,notifyAll
wait:Object类中的final方法,有InterruptedException。它的作用是导致当前的线程等待,直到其它线程调用此对象的notify方法或者notifyAll方法,wait还有一些重用方法,传参数,比如说时间长度。
当前的线程必须拥有此对象监视器,然后该线程发布对此监视器的所有权并且开始等待,直到其它线程通过调用notify方法或者notifyAll方法,通知在此对象的监视器上等待的线程醒来,然后该线程将等到重新获得对监视器的所有权后才能开始执行。
wait和sleep的区别:
sleep是Thread里面的方法,在被执行的时候,锁并不会被交出去,要直到sleep所在的方法全部被执行完毕以后才交出锁。
wait是Object里面的方法,在被执行的时候,锁被解除,由其它线程去争夺,直到有notify或者notifyAll方法唤醒它。
notify:
也是Object类中的方法,用于唤醒在此对象上等待着的某一个线程,如果有很多线程挂起的话,就随机地决定哪一个。注意,是随机的,这时可以用notifyAll来唤醒所有的。一定要注意这个问题,除非你明确地知道你在做什么,否则最好就是用notifyAll。
附代码
public class Car implements Runnable {
private String name;
private Tunnel tunnel;
private String str;
public Car(int type, String name, Tunnel tunnel) {
this.name = name;
this.tunnel = tunnel;
str = type == CarType.LEFT?left to right:right to left;
}
@Override
public void run() {
synchronized (Car.class) {
tunnel.inUse();
System.out.println(car + name + has pass the runnel from +str + @ + new Date());
tunnel.release();
try {Thread.sleep(1000);}
catch (InterruptedException e) {e.printStackTrace();}
}
}
}
public class CarType {
public static final int LEFT = 1;
public static final int RIGHT = 2;
}
public class Tunnel {
private boolean flag = false;//判断是否有车
public synchronized void release(){
while (flag == false) {
try {
this.wait();
} catch (I
您可能关注的文档
- 十八大报告全.doc
- 河北省衡水中学2016届高三上学期期中考试地理试卷(Word版).doc
- 河北省枣强中学2015-2016学年高二地理上学期第一次月考试题.doc
- 河西走廊不同类型表层样品的粒度研究.doc
- 石油地质学课设last.doc
- 恒流高压静电除尘器说明书.doc
- 虹口区2014学年度第一学期期终教学质量监控测试高三地理试卷.doc
- 实训报告参考模板 北京联合大学 潘家鹏.doc
- 实验室安全学复习题.doc
- 湖北省部分重点中学2013届高三起点考试文综试卷(word版有答案).doc
- 2020版 沪科技版 高中生物学 必修2 遗传与进化《第4章 生物的进化》大单元整体教学设计[2020课标].docx
- 情绪价值系列报告:春节消费抢先看-国证国际证券.docx
- 精品解析:北京市东直门中学2023-2024学年高二下学期3月阶段性考试(选考)物理试题(解析版).docx
- 2020版 沪科技版 高中生物学 必修2 遗传与进化《第4章 生物的进化》大单元整体教学设计[2020课标].pdf
- 2020版 沪科技版 高中生物学 选择性必修1 稳态与调节《第1章 人体的内环境和稳态》大单元整体教学设计[2020课标].pdf
- 2020版 沪科技版 高中生物学 选择性必修1 稳态与调节《第1章 人体的内环境和稳态》大单元整体教学设计[2020课标].docx
- 液冷盲插快接头发展研究报告-全球计算联盟.docx
- 精品解析:北京市东直门中学2023-2024学年高二下学期3月阶段性考试(选考)物理试题(原卷版).docx
- 精品解析:北京市东直门中学2024届高三考前练习数学试卷(解析版).docx
- 2020版 沪科技版 高中生物学 选择性必修1 稳态与调节《第2章 人体的神经调节》大单元整体教学设计[2020课标].docx
最近下载
- 2025上海杨浦区初三语文一模“我的2024”审题立意及范文-备战2025年中考语文各地名校模考卷作文导写.docx VIP
- 智能化设计管控要点.doc VIP
- 酒店(智能化)解决方案.pptx VIP
- 2.2.2地域文化与城乡景观-高一地理课件(湘教版2019必修第二册).pptx
- (PLA) 可编程阵列逻辑(PAL).PPT
- 2.2+地域文化与城乡景观+课件高一地理鲁教版(2019)必修第二册.pptx
- 昆虫生理学第十一章昆虫生殖系统.ppt
- 【核心素养】第14课《叶圣陶先生二三事》公开课一等奖创新教学设计 统编版语文七年级下册.docx VIP
- 海因里希法则.ppt
- 房产过户协议书范本(14篇).docx VIP
文档评论(0)