java多线程课件_第1页
java多线程课件_第2页
java多线程课件_第3页
java多线程课件_第4页
java多线程课件_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、多线程机制,1.1 Java多线程机制(概念了解,了解)1.2多线程实现方法(焦点和困难)1.3多线程状态和时间表(焦点)1.4线程同步1.5线程通信,1.1 Java多线程机制,1.1.1线程的基本概念线程概念:线程是应用程序的执行为什么需要多线程?线程和进程之间的区别:能否独立运行?内存空间?多线程机制,线程设置示例:public class simple runnable implements runable private string message;public static void main(string args)simple runnable R1=new simple r

2、unnable(hello);Thread t1=new Thread(R1);t1 . start();public simple runnable(string message)this . message=message;public void run()for(;)system . out . print ln(message);线程开始运行时,将在public void run()方法中执行。此方法是线程执行的起点,定义为应用程序从main()开始。首先,main()方法构建SimpleRunnable类的实例。实例有自己的一个String数据,该数据初始化为Hello。线程在运行过

3、程中处理的数据,作为Thread类构造函数传递给实例。执行的代码是实例方法run()。1.2多线程实现方法,主要事项:两种实现方法可以创建Thread子类以声明Runnable接口实现,创建Thread类的子类,使用此方法创建新线程,以及创建Thread类的子类。Class MyThread extends Thread会复写子类别的run()方法。Public void run()创建子类中的对象,并调用start()方法启动新线程。my thread thread=new my thread();thread . start();Start()方法调用run()方法来执行线程。实现Thre

4、ad子类方法的多线程示例,class first Thread extends Thread public void run()trypy stem . out . print ln;for(int I=0);i6;I)system . out . print ln(First I);sleep(1000);system . out . print ln(first thread finishes running。) :实现Thread子类方法的多线程示例的catch (InterruptedException e)、class second Thread extends Thread pub

5、lic voidrun()trypy stem . out . prite):For(int I=0;i6;I)system . out . print ln(t second I);sleep(1000);system . out . print ln(t second thread finishes running);实现Thread子类方法的多线程示例的interrupte dexception e(catch)、public class thread test1 public thread test1()first thread first=new firead firstsecond

6、 thread second=new second thread();first . start();second . start();public static void main(string args)new thread test 1();结果是第一个thread starts running . first 0 second thread starts running . second 0 first 1 second 1 first 2 second 2 first 3 first 4 second 4 fi Rst 5 second 5Run()方法是新线程执行特定任务的位置。通

7、过对比了解有关:程序的门户main()方法的详细信息。线程的入口,run()方法。applet中的条目,init()方法。执行方法是执行线程的主体,启动线程时,Java直接调用public void run()停止线程,充当小程序的stop调用线程的stop thread.stop() sleep方法,挂起线程执行以获取其他线程的机会,捕获sleep以引发异常try sleep(100)catch(interrupted exception e),1 .多线程实现方法,2 Runnable接口实现Runnable接口是什么?Runnable是java.lang软件包的接口。定义线程创建和执行功

8、能。定义了run()方法以完成特定操作。实现Runnable接口,实现Runnable接口的主要步骤:定义实现Runnable接口的类,在class first thread implements Runnable及其类中实现run()方法。Public void run()创建此类的对象。first thread first=new first thread();使用Thread(Runnable target)构造函数创建Thread对象,然后调用start()方法启动线程。Thread Thread 1=new Thread(first);thread 1 . start();class

9、 first thread implements Runnable public void run()trypy stem . out . print ln(first thread starts running)。),runnable接口多线程示例实现:For(int I=0;i6;I)system . out . print ln(First I);thread . sleep(1000);system . out . print ln(first thread finishes running。):Catch(中断式执行e)class second thread implements r

10、unnable public void run()trypy stem . out . print ln(t SSS):For(int I=0;i6;I)system . out . print ln(t second I);thread . sleep(1000);system . out . print ln(t second thread finished .)interrupte d exception e(interrupte d exception e),public class runtest public runtest()first thread first=new firs

11、t thrread firstsecond thread second=new second thread();Thread Thread 1=new Thread(first);Thread Thread 2=new Thread(second);thread 1 . start();thread 2 . start();public static void main(string args)new runtest();结果是第一个thread starts running . first 0 second thread starts running . second 0 first 1 s

12、econd 1 first 2 second 2 first 3 first 4 second 4 fi Rst 5 second 5通过比较两种多线程实现方法,可以实现相同点:多线程的差异。灵活性:Runnable界面更灵活。服务范围:Runnable Thread类别的子类别。1.3多线程状态和调度,1线程的状态为4种状态(new economic:分配的内部,非执行状态:start()阻塞状态停止状态:stop()线程状态,4种状态的相关概念生命周期如下。1 new: Thread此时,线程对象已分配内存空间并初始化其个人数据,但线程尚未调度,可以使用start()方法调度,也可以使用s

13、top()方法中断。新线程在调度后将转换为可执行状态。线程状态,2可执行:可以计划在可执行环境中随时执行。可以细分为两个子状态:运行状态、CPU回收和运行中。只有处理器资源处于等待的就绪状态。这两个子状态的切换由运行调度程序控制。3阻塞:线程由于某种原因暂停执行。线程状态,4死:调用另一个线程以完成线程执行或停止stop()方法时进入此停止状态。指示线程退出可执行状态,不再处于可执行状态。1.3 .2线程优先级和时间表,问题:为什么要保留线程?为什么引入优先级?您可以同时运行应用程序的多个线程,但是如果系统内部的所有线程仍在串行运行,您如何知道哪个线程先运行,哪个线程以后运行?Java引入了优

14、先级概念,即线程获取CPU的优先级,优先级越高,获得CPU的权限越大,执行机会越多,执行时间也越长。线程优先级,Java将优先级指定为级别10,以1到10的整数表示。数字越大,优先级越高。Thread类定义了三个优先次序常量:MIN_PRIORITY、MAX_PRIORITY和NORM_PRIORITY,它们的值分别为1、10和5。为线程指定优先级时,其值必须在1到10之间。否则,将出现错误。如果应用程序没有为线程分配优先级,则Java系统会将NORM_PRIORITY分配给该线程。线程计划原则,计划是分配CPU资源并确定线程的执行顺序。Java使用抢占式调度方法,高优先级线程可以取消低优先级

15、线程的执行。如果优先级较高的线程正在运行,优先级较低的线程可以停止运行,放弃CPU,将其推回到备用队列,使优先级较高的线程在下一次运行排队后立即运行。如果线程的优先级相同,则根据优先服务原则安排。线程调度原则,问题:如果抢占高优先级低的线程后继续占用CPU,低优先级线程如何控制?有两种方法可以改变这种现象。一种是调用sleep()方法临时进入休眠状态,然后导出CPU,以便相同的优先级线程和低优先级线程有执行机会。第二种方法是调用yield()放弃CPU。在这种情况下,具有相同优先级的线程可能会运行。1.3.3线程的控制需要了解Java程序的线程结构。每个Java程序都有一个默认的主线程。App

16、lication,默认线程是执行main方法的线程。小程序,主线程指示浏览器加载和运行Java小程序。要实现多线程,必须在主线程中创建新的线程对象。线程的状态转换图,阻塞,死亡,可执行,suspend()sleep()wait()I/o blocking,resume()sleeptime _ out notots通常,程序使用以下方法控制线程:调用start (): run()方法,使线程开始执行。Stop():立即停止执行线程,内部状态变为0,放弃占用的资源。Suspend():暂停线程执行。线程的所有状态和资源都保持不变,以后可以通过其他线程调用resume()方法重新启动此线程。线程控制方法,resume():继续暂停的线程并调度暂停的线程执行。Sleep():调整指定线程的Java执行时间(以毫秒为单位)。Join():调用线程等待此线程运行结束。Yield():暂停调度线程,将其放在等待队列的末尾,然后等待下一轮执行,从而有机会执行具有相同优先级的其他线程。线程控制方法,isAlive():如果检查线程当前是否正在运行的线程处于“新建”状态,则线程调用方法

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论