多线程编程(二).docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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)

jjkk585 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档