实验10多线程编程.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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();

文档评论(0)

ktj823 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档