- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
多线程编程(二)
第十六章 多线程编程(二)
一、大纲
了解线程的优先级
理解多线程同步的概念
掌握多线程同步的实现方法
了解死锁的概念
二、实验目标:
掌握多线程的状态
掌握多线程的创建方法
掌握多线程的优先级概念
掌握多线程的同步和通信
三、实验方式:
要求学生自己独立完成
四、上机指导任务
4.1任务1:线程优先级(时间:20分钟)
4.1.1 任务描述
用继承Tread类的方式,定义一个线程MyThread,该线程还有一个boolean型的属性running和一个long型的属性i。
编写MyThread的stop方法,该方法将设置running的值为false。
在MyThread的run方法中,使用while (running)的循环对属性i进行累加。
编写Main类,在其main方法中创建MyThread类的两个对象hi_t和lo_t,并设置它们的优先级为高于默认优先级2和低于默认优先级2。之后启动这两个线程对象,主线程沉睡10秒后,将两个线程停掉,之后打印这两个线程的i属性,看它们执行时间的比例。。
任务目的
练习理解线程优先级。
任务要求
无
4.1.4 难点提示
设置线程优先级使用setPriority方法。
线程的默认优先级是Thread.NORM_PRIORITY,是一个静态常量。
保证主线程在最后结束,应使用jion方法
4.2任务2:线程同步(时间:20分钟)
4.2.1 任务描述
完成课本P251页练习,实现生产者和消费者线程同步的程序,观察输出结果,分析错误原因。
4.2.2 任务目的
理解线程同步。
4.2.3 任务要求
观察输出,结合实际认真分析问题。
4.2.4 难点提示
无
4.3任务3:线程同步(时间:20分钟)
4.3
完成课本P252页操作实践,理解程序的执行原理。
4.3
练习线程同步。
4.3
要求输出正确的生产消费逻辑。
4.3.4 难点提示
无
五、课后作业
5.1 作业1 馒头的生产和消费(时间:20分钟)
5.1.1 作业任务
起两个线程,一个代表厨师,一个代表顾客,厨师生产馒头(打印馒头编号从1递增),顾客消费馒头(打印馒头编号),用一个list存储馒头(容量是10);
厨师每200毫秒生产1个馒头,当list装满时,停止生产,当list不空时通知消费者去消费;
顾客每300毫秒消费1个馒头,当list空时,停止消费,当list不满时通知厨师生产;
编写程序实现以上场景。
5.1.2 任务要求
同一编号的馒头只能被生产和消费一次;
一个编号的馒头必须先生产,后消费,不存在超前消费
5.1.3 难点提示
使用Integer对象代表馒头,值为馒头编号;
起两个线程,一个代表厨师,一个代表顾客;
使用Object.wait()方法使当期线程等待,使用Object.notify()方法唤醒此对象上等待的单个线程。
5.2 作业2 打印机共享(时间:20分钟)
5.2.1 作业任务
定义一个打印机类,有一个打印方法 void print(String str){};方法中在控制台中输出传入的字符串参数并换行。
编写Main类的main方法,创建一个打印机对象 printer,创建三个线程对象A,B,C,A在run方法中循环10次用printer打印1-20数字,睡眠100毫秒,B在run方法中循环10次用printer打印a-zA-Z字符串,睡眠100毫秒,
C在run方法中循环10次用printer打印20个“#”,睡眠100毫秒,启动三个线程,观察输出。
5.2.2 任务要求
运行程序10秒以上,认真观察输出情况。
5.2.3 难点提示
无
5.3 作业3 打印机共享(时间:20分钟)
5.3.1 作业任务
作业2中输出有交叉情况发生,根据所学知识设计程序改进。
5.3.2 任务要求
要求输出不能有交叉情况,即同一时刻只能有一个线程使用printer对象打印语句。
5.3.3 难点提示
使用synchronized同步各线程。
5.4 作业4 兔生兔(时间:20分钟)
5.4.1 作业任务
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....。
5.4.2 任务要求
由用户输入第几个月份,计算输出这个月末兔子总数。
5.4.3 难点提示
此题为算法训练题,与本章内容无关,或有超纲,学员应自行扩展并完成训练,旨在锻炼学员的逻辑思维和编程能力,完成时间不做强制要求。
5.5 作业5 兔生兔(时间:20分钟)
5.5.1 作业任务
试用线程解决下面算法训练1(仅作为线程练习,结果不一定正确),可假设程序100ms为现实1个月。
5.5.2 任务要求
文档评论(0)