- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验14--多线程编程
14.1 实验目的
(1) 掌握多线程编程的特点;
(2) 了解线程的调度和执行过程;
(3)? ?掌握资源共享访问的实现方法。
14.2 知识要点
14.2.1线程的概念
(1)??? 线程是程序中的一个执行流,多线程则指多个执行流;
(2)??? 线程是比进程更小的执行单位,一个进程包括多个线程;
(3)??? Java语言中线程包括3部分:虚拟CPU、该CPU执行的代码及代码所操作的数据。
(4)??? Java代码可以为不同线程共享,数据也可以为不同线程共享;
14.2.2 线程的创建
(1) 方式1:实现Runnable接口
Thread类使用一个实现Runnable接口的实例对象作为其构造方法的参数,该对象提供了run方法,启动Thread将执行该run方法;
(2)? ?方式2:继承Thread类
重写Thread类的run方法;
14.2.3 线程的调度
(1) 线程的优先级
????????? 取值范围1~10,在Thread类提供了3个常量,MIN_PRIORITY=1、MAX_ PRIORITY=10、NORM_PRIORITY=5;
????????? 用setPriority()设置线程优先级,用getPriority()获取线程优先级;
????????? 子线程继承父线程的优先级,主线程具有正常优先级。
(2) 线程的调度:采用抢占式调度策略,高优先级的线程优先执行,在Java中,系统按照优先级的级别设置不同的等待队列。
14.2.4 线程的状态与生命周期
说明:新创建的线程处于“新建状态”,必须通过执行start()方法,让其进入到“就绪状态”,处于就绪状态的线程才有机会得到调度执行。线程在运行时也可能因资源等待或主动睡眠而放弃运行,进入“阻塞状态”,线程执行完毕,或主动执行stop方法将进入“终止状态”。
14.2.5 线程的同步--解决资源访问冲突问题
(1) 对象的加锁
所有被共享访问的数据及访问代码必须作为临界区,用synchronized加锁。对象的同步代码的执行过程如图14-2所示。
synchronized关键字的使用方法有两种:
????????? 用在对象前面限制一段代码的执行,表示执行该段代码必须取得对象锁。
????????? 在方法前面,表示该方法为同步方法,执行该方法必须取得对象锁。
(2) wait()和notify()方法
用于解决多线程中对资源的访问控制问题。
????????? wait()方法:释放对象锁,将线程进入等待唤醒队列;
????????? notify()方法:唤醒等待资源锁的线程,让其进入对象锁的获取等待队列。
(3)? 避免死锁
指多个线程相互等待对方释放持有的锁,并且在得到对方锁之前不会释放自己的锁。
15.3 样例程序
样例1:利用多线程编程编写一个龟兔赛跑程序。
??? 乌龟:速度慢,休息时间短;
??? 兔子:速度快,休息时间长;
【参考程序1】字符方式下实现方案
class Animal extends Thread {
? int speed; ?//速度
public Animal( String str,int speed) {
???? super(str);?? //线程名用动物名代表
???? this.speed=speed;
? }
? public void run() {
??? int distance=0;
??? int sleepTime;
??? while (distance=1000) {
????? System.out.println(getName()+is at+distance);
?? ???try {
??????? ?distance+=speed; ?//每次跑的距离简单用速度计算
???????? sleepTime=(int)( speed+Math.random()*speed); //速度快休息时间要长
???????? sleep(sleepTime);
????? } catch (InterruptedException e) {}
??? }
? }
}
public class Race {
?? public static void main(String arg[]) {
???? Animal a1, a2;
???? a1=new Animal(rabit,100);
???? a2=new Animal(turtle,20);??
???? a2.setPriority(Thread.MAX_PRIORITY); //让乌龟的运行优先级更高
???? a1.start();
???? a2.start();
您可能关注的文档
- 宝宝起100分名字的重要性.doc
- 宝宝起名——蛇年宝宝取名字六要点起名知识.doc
- 宝宝起名之精选乳名及160个寓意深刻的名字.doc
- 宝宝起名好听的双胞胎名字.doc
- 宝宝起名根据字形,性格,化典构思,谐音起名.doc
- 宝宝起名适合羊年男女宝宝名字大全.docx
- 宝宝辅食制作100款(经典).doc
- 宝宝辅食制作99款.docx
- 宝宝辅食大集合2013.doc
- 宝宝辅食枣泥小米粥.doc
- 人教版九年级英语全一册单元速记•巧练Unit13【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit9【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit11【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit14【单元测试·提升卷】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit8【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit4【单元测试·提升卷】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit13【单元测试·基础卷】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit7【速记清单】(原卷版+解析).docx
- 苏教版五年级上册数学分层作业设计 2.2 三角形的面积(附答案).docx
- 人教版九年级英语全一册单元速记•巧练Unit12【单元测试·基础卷】(原卷版+解析).docx
最近下载
- 空调主机吊装方案.docx
- 基层儿科医务人员服务能力提升学习班答案-2024华医网继续教育答案.docx VIP
- 部编 人教版小学二年级上册语文教学课件 5.课文 14.我要的是葫芦 .pptx VIP
- 让“工具包”理念和方法落地.pdf VIP
- 国家开放大学《可编程控制器应用实训》形考任务2(实训二)参考答案.docx
- 4.2 实现中华民族伟大复兴的中国梦 课件(18张PPT)-2023-2024学年高中政治统编版必修一中国特色社会主义.pptx VIP
- 费森尤斯CRRT操作流程.doc VIP
- 五年级上册英语期中试卷人教精通版.pdf VIP
- 第17课昆明的雨(课件)(共27张PPT).pptx VIP
- 小学信息技术(信息科技)第六册泰山版(2018)合集.docx
文档评论(0)