实验10 多线程编程

实验10 多线程编程

ID:37679773

大小:67.50 KB

页数:9页

时间:2019-05-28

实验10 多线程编程_第1页
实验10 多线程编程_第2页
实验10 多线程编程_第3页
实验10 多线程编程_第4页
实验10 多线程编程_第5页
资源描述:

《实验10 多线程编程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验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接口的实例对象作为其构造方法的参

2、数,该对象提供了run方法,启动Thread将执行该run方法;(2)  方式2:继承Thread类重写Thread类的run方法;14.2.3线程的调度(1)线程的优先级l        取值范围1~10,在Thread类提供了3个常量,MIN_PRIORITY=1、MAX_PRIORITY=10、NORM_PRIORITY=5;l        用setPriority()设置线程优先级,用getPriority()获取线程优先级;l        子线程继承父线程的优先级,主线程具有正常优先级。(2)线程的调度:采用抢占式调度策略,高优先级的线程优先执行,在Java中,系统按照优

3、先级的级别设置不同的等待队列。14.2.4线程的状态与生命周期说明:新创建的线程处于“新建状态”,必须通过执行start()方法,让其进入到“就绪状态”,处于就绪状态的线程才有机会得到调度执行。线程在运行时也可能因资源等待或主动睡眠而放弃运行,进入“阻塞状态”,线程执行完毕,或主动执行stop方法将进入“终止状态”。14.2.5线程的同步--解决资源访问冲突问题(1)对象的加锁所有被共享访问的数据及访问代码必须作为临界区,用synchronized加锁。对象的同步代码的执行过程如图14-2所示。synchronized关键字的使用方法有两种:l        用在对象前面限制一段代码的

4、执行,表示执行该段代码必须取得对象锁。l        在方法前面,表示该方法为同步方法,执行该方法必须取得对象锁。(2)wait()和notify()方法用于解决多线程中对资源的访问控制问题。l        wait()方法:释放对象锁,将线程进入等待唤醒队列;l        notify()方法:唤醒等待资源锁的线程,让其进入对象锁的获取等待队列。(3) 避免死锁指多个线程相互等待对方释放持有的锁,并且在得到对方锁之前不会释放自己的锁。15.3样例程序样例1:利用多线程编程编写一个龟兔赛跑程序。·  乌龟:速度慢,休息时间短;·  兔子:速度快,休息时间长;【参考程序1】字符方

5、式下实现方案classAnimalextendsThread{ intspeed; //速度publicAnimal(Stringstr,intspeed){    super(str);  //线程名用动物名代表    this.speed=speed; } publicvoidrun(){   intdistance=0;   intsleepTime;   while(distance<=1000){     System.out.println(getName()+"isat"+distance);     try{        distance+=speed; //每次跑的

6、距离简单用速度计算        sleepTime=(int)(speed+Math.random()*speed);//速度快休息时间要长        sleep(sleepTime);     }catch(InterruptedExceptione){}   } }}publicclassRace{  publicstaticvoidmain(Stringarg[]){    Animala1,a2;    a1=newAnimal("rabit",100);    a2=newAnimal("turtle",20);      a2.setPriority(Thread.M

7、AX_PRIORITY);//让乌龟的运行优先级更高    a1.start();    a2.start(); }}【编程技巧】(1)   速度快,跑的距离增加也快,这里简单地将速度加到距离上,未考虑跑的时间;(2)   为了让乌龟得到更多的运行机会,采取两项措施,一让线程的睡眠时间与速度成正比,二是让乌龟得到更高的优先级。【参考程序2】—图形方式下,图14-3为程序的运行演示。publicclassrunnerextendsAppletim

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。