第15章 多线程机制.ppt_第1页
第15章 多线程机制.ppt_第2页
第15章 多线程机制.ppt_第3页
第15章 多线程机制.ppt_第4页
第15章 多线程机制.ppt_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、1、第15章多线程机制主要内容Java中线程Thread子类创建线程使用Runnable接口线程的一般方法GUI线程同步方法使用wait ()、notify、notifyAll ()方法定时器线程联合守护进程线程。 难点:线程同步。 2、先前我们开发的程序多为单线程,一个程序只有一条从头到尾的执行线索。 然而,现实世界的许多过程具有多条线索同时运动的特性。 例如,一个网络服务可能需要同时处理多个客户端的请求。 publicclasshellopublicstaticvoidmain (字符串阵列) while (真) system.out.println (帮助); while(true) S

2、ystem.out.println (下午好),3、publicclasshellopublicstaticvoidmain (字符串阵列) my thread t=new my thread (); t .开始(); while (真) system.out.println (你好) classmythreadextendsthreadpublicvoidrun () while (真) system.out.println (帮助)。 三叉树.休眠(1000 ); catch (交互式指纹) e .打印堆栈跟踪();4,4,15.1 Java中的线程、15.1.1程序、进程和线程在操作系统

3、中通常被视为独立于系统资源分配单元运行进程的基本单元。 一个任务是进程。 例如,系统生成两个进程,因为当前正在运行IE浏览器,并且可以打开记事本。 一般而言,一个进程既包含要执行的指令,又包含执行指令所需的各种系统资源(CPU、内存、输入输出端口等)。 不同进程消耗的系统资源相对独立。 过程具有动态性、并发性、独立性和异步性等特点。 线程是比进程小的执行单位。 进程运行时,可以生成多个线程。 每个线程都有一个非常类似于进程的相对独立的资源和生命周期。 可以在线程之间共享代码和数据,实时通信,进行必要的同步操作。 一个进程可以有一个或多个线程。 如果程序员不创建线程对象,则至少会创建一个主线程。

4、 5、5、5,15.1.2线程的状态和生命周期。 线程是动态执行的实体,每个线程都有创建、执行到消灭的过程。 线程的生命周期在新状态、可执行状态、阻止状态或死亡状态之间进行切换。 线程的控制和调度使您能够更改线程的状态。 6,7,1,创建状态thread my thread=newmythreadclass (); 一旦声明并创建了Thread类或其子类的对象,该线程对象就会保持创建状态。 创建状态是已创建线程但尚未开始运行的特殊状态。 处于创建状态的线程是空线程对象,不分配资源,但有自己的内存空间,可以通过调用start ()方法进入就绪状态。8,2、处于可执行状态(Runnable )的线

5、程已有执行条件,但尚未取得时间片,因此进入线程队列,等待系统分配CPU。 获取CPU后,线程进入运行状态,自动调用自己的run ()方法。 thread my thread=newmythreadclass (); myThread.start (); 可执行状态也称为准备完成状态。 9、3、run ()方法的可用性,包括对处于运行就绪状态的线程进行调度,一旦获得处理器资源,则进入执行状态,调用另一个方法后终止、一个资源被阻止、或者直到执行完成并死亡使用yield ()方法,线程可以主动放弃CPU控制权。 执行结束或执行stop ()方法时,线程可能会放弃控制权而导致死亡。 有10、4个原因的

6、中断: JVM将CPU资源从当前线程切换到其他线程,本线程使CPU的使用权处于中断状态。 线程正在使用CPU资源时,执行sleep(int millseeond )方法将当前线程置于休眠状态。 线程执行sleep(int millsecond )方法后,立即授予CPU使用权,使当前线程处于中断状态。在经过millsecond残奥仪表指定的毫秒数后,线程将再次进入线程队列并等待CPU资源,从中断的位置继续执行。 阻塞状态或阻塞状态也被称为不可驾驶状态(Not Runnabel )。 由于某种原因(输入/输出、等待消息或其他阻塞情况),无法执行线程状态。 在这种情况下,即使处理器空闲,线程也不能执

7、行。11、线程正在使用CPU资源时,执行wait ()方法将当前线程置于待机状态。 处于等待状态的线程不会主动进入线程队列并等待CPU资源。 必须通知其他线程重新进入线程队列,以便调用notify ()方法等待CPU资源。 线程正在使用CPU资源时,执行读取/写入操作时,执行阻塞等操作时,将进入阻塞状态。 如果处于阻塞状态,则线程不能进入排队队列,并且只有在消除了阻塞的原因时,线程才再次进入线程队列并等待CPU资源,并且从原始中断处继续执行。12、5、死亡状态(Dead )线程的终止,通常可以通过自然取消(线程执行完成)或停止(stop ()方法调用)这两种方法来实现。 现在,建议您完成线程的

8、执行,而不是调用stop ()结束线程的执行。 例如,15.1 Examplel5_1.java、13,15.1.3线程的调度和优先级以及处于就绪状态的线程可能首先进入就绪队列并将CPU资源排队,同时在就绪队列中有多个线程。 Java虚拟机的线程调度负责线程的管理,调度将线程的优先顺序分为10个等级,分别用Thread类的类常数表示。各Java线程的优先顺序是常数110之间,即Thread.MIN_PRIORITY 中的组合图层性质变更选项。 Thread类定义了成员变量MIN_PRIORITY、MAX_PRIORITY和NORMAL_PRIORITY,它们表示线程最低、最高和正常优先级,代表

9、性优先级别分别为1、10和5。 创建线程对象后,默认线程优先级为5。 14、Java包含线程调度程序,用于监视所有进入就绪状态的线程。 线程调度器根据线程的优先级确定线程的执行顺序,并使用抢占策略调度线程的执行。 然后用户调用Thread类的getPriority ()成员方法实现,并调用Thread类的setPriority(int newPriority )成员方法以获取线程的优先级15、假设ThreadObj是thread类的对象,则为threadObj.getPriority (); thread obj.set priority (6) thread obj.set priority

10、 (3)注: Java程序中使用的线程的优先级取决于运行Java程序的环境。 如果正在运行的系统优先级与Java设置优先级不同,则Java优先级将映射到正在运行的系统优先级。 因此,最好不要让程序的执行完全依赖于线程的优先级。 16、【例】创建多个线程对象,分别设定优先顺序,显示输出。是/filename 3360 thread priority.javapublicclassthreadpriorityextendsthreadthreadpriority (字符串消息) /。 system.out.println (读取:消息传递); 调用公共void run ()/gets ring (

11、)方法,并将优先级for (int i=0; i 4; I ) system.out.println (获得(); public String getString() /检索线程的名称及其优先级returnrunningthreads : getname () prority : get priority (); 十七、公共发展(字符串区域)硬盘1=新硬盘优先级(第一硬盘)。 /线程实例1 thread1.start (); 三叉树2=新三叉树优先级(二叉树); /线程实例2 thread2.start (); 三条线3=新三条优先级(三条线); /线程实例3 thread3.start ()

12、; 开始设置优先级.读取1 .设置优先级(读取. min _优先级) :读取2 .设置优先级(读取. norm _优先级) : thread3. set priority (thread.max _ priority ):18,15.2 thread的子类创建线程,在Java语言中使用thread类或子类创建线程对象。 本节介绍如何使用Thread子类创建线程对象。 创建Thread类的子类时,必须重写父类的run ()方法。 它的目的是为线程指定特定的操作。 否则,线程将不会执行任何操作,因为父类的run ()方法没有操作语句。 使用示例15.2 Examplel5_2.java、19、15

13、.3.1 Runnable接口、15.3.1 Runnable接口和目标对象创建线程的另一种方法是使用Thread类使用Thread创建线程对象时,通常在Thread(Runnable target )、20、线程之间共享相同的存储单元(包括代码和数据),利用这些共享单元实现数据交换、实时通信和必要的同步操作的构造使用Thread(Runnable target )构造方法创建的线程使用相同的目标对象,因为一旦轮到利用CPU资源的时候,目标对象将自动调用接口中的run ()方法使用Runnable接口比使用Thread的子类灵活,因为目标对象的成员变量当然由这些线程共享,并且可以根据需要属于特定类的子类以创建目标对象类对于示例15.3 Examplel5_3.java、21、15.3.2run方法的局部变量,示例15.4 Examplel5_4.java是对于具有相同目标对象的线程当中一个线程享受的另一个线程目标对象再次调用接口的run方法,run ()方法的局部变量再次分配内存空间。 也就是说,run ()方法已经运行了两次,每次都在不同的线程上运行。 也

温馨提示

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

评论

0/150

提交评论