第七章Java的多线程程序设计_第1页
第七章Java的多线程程序设计_第2页
第七章Java的多线程程序设计_第3页
第七章Java的多线程程序设计_第4页
第七章Java的多线程程序设计_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、第七章第七章 JavaJava的多线程程序设计的多线程程序设计 7.1 7.1 线程的概念线程的概念7.1.1 7.1.1 进程和线程进程和线程 进程是一个具有一定独立功能的程序在一个数据进程是一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。进程是存储器、外设集合上的一次动态执行过程。进程是存储器、外设等资源的分配单位。也是处理器的调度对象。等资源的分配单位。也是处理器的调度对象。 但每个进程有自己独立的内存空间和资源,进程但每个进程有自己独立的内存空间和资源,进程之间不会共享系统资源。之间不会共享系统资源。线程就是比进程更小的运行单位,一个进程可以线程就是比进程更小的运行单位,

2、一个进程可以被划分成多个线程。在一个支持线程的系统中,线被划分成多个线程。在一个支持线程的系统中,线程是处理器的调度对象。程是处理器的调度对象。一个进程中的线程共享进程的资源。线程之间的通一个进程中的线程共享进程的资源。线程之间的通信要比进程之间的通信方便。信要比进程之间的通信方便。7.1.2线程和多任务线程和多任务(multi task) 多任务是指在系统中可以同时运行多个程序,如果多任务是指在系统中可以同时运行多个程序,如果只有一个处理器,在每一时刻只有一个进程的一条指只有一个处理器,在每一时刻只有一个进程的一条指令被执行。可以使这些任务交替执行,由于间隔的时令被执行。可以使这些任务交替执

3、行,由于间隔的时间短,这些程序看上去好像在同时运行。间短,这些程序看上去好像在同时运行。 如果将进程再划分成进线程,每个线程轮流占用处如果将进程再划分成进线程,每个线程轮流占用处理器,可以减少并发控制的时间理器,可以减少并发控制的时间 。 windows98/NT/2000操作系统就是将进程划分为线程操作系统就是将进程划分为线程来支持多任务的并发处理。来支持多任务的并发处理。7.1.3 Java对多线程的支持对多线程的支持Java通过对通过对Thread类的继承或对类的继承或对Runnable接口的实接口的实现,实现多线程编程。现,实现多线程编程。7.2 7.2 线程的创建线程的创建 为了将进

4、程划分成线程,要在程序中创建多个线程对为了将进程划分成线程,要在程序中创建多个线程对象。象。ThreadThread类用来创建和控制线程。一个线程要从类用来创建和控制线程。一个线程要从runrun方方法开始执行,法开始执行,runrun方法的声明在方法的声明在java.lang.java.lang.RunnableRunnable接接口中。口中。每个程序至少有一个主线程每个程序至少有一个主线程。 7.2.1 7.2.1 RunnableRunnable接口接口 在在RunnableRunnable中,只声明了一个方法中,只声明了一个方法runrun public void run( ); pu

5、blic void run( ); 已实现的已实现的runrun方法称为该对象的线程体。方法称为该对象的线程体。 在创建并启动了一个线程后,在创建并启动了一个线程后,runrun方法被系统自动调方法被系统自动调用。用。7.2.2 7.2.2 ThreadThread类类在在ThreadThread类中,类中,runrun方法被实现为空方法。方法被实现为空方法。ThreadThread类类的声明格式如下:的声明格式如下:public class Thread extends Object implements public class Thread extends Object implemen

6、ts RunnableRunnableThreadThread中的方法如下:中的方法如下: 构造方法构造方法public Thread( );public Thread(String name)public Thread(Runnale target)public Thread(Runnable target, String name)public Thread(ThreadGroup group, Runnable target)public Thread(ThreadGroup group, String name)public Thread(ThreadGroup group, Runn

7、able target, String name)其中:其中:name是线程名是线程名; target是执行线体的目标对象,它必须实现是执行线体的目标对象,它必须实现 Runnable的的run方法;方法; group是线程所属的线程组的名字。是线程所属的线程组的名字。Thread的成员方法的成员方法public final String getName( ) /返回线程名返回线程名public final void setName(String name) /将线程的名字设置为将线程的名字设置为namepublic void start( ) /启动已创建的线程对象启动已创建的线程对象pub

8、lic final Boolean isAlive( )/线程是否已启动线程是否已启动public final ThreadGroup getThreadGroup( ) /返回线程所属的线程组返回线程所属的线程组public String toString( ) /以字符串的形式得到线程的以字符串的形式得到线程的 /名字、优先级和所属的线程组等信息名字、优先级和所属的线程组等信息 Thread的静态成员方法的静态成员方法public static Thread currentThread( ) /返回当前正在执行的线程对象返回当前正在执行的线程对象public static int acti

9、veCount( ) /返回当前线程组的活动线程个数返回当前线程组的活动线程个数public static int enumerate( Thread tarray)/将当前线程组中的活动线程,将当前线程组中的活动线程,/包括子线程复制到数组包括子线程复制到数组tarray中中 7.2.37.2.3创建线程的方法创建线程的方法继承继承ThreadThread方法创建线程方法创建线程 从从ThreadThread类派生出子类,在此子类中覆盖类派生出子类,在此子类中覆盖ThreadThread的的runrun方法。方法。实现实现Runnable接口创建线程接口创建线程创建类实现接口创建类实现接口R

10、unnable的的run方法,以此类的对方法,以此类的对象为目标对象,创建了线程对象。象为目标对象,创建了线程对象。7.3 7.3 线程的状态与控制线程的状态与控制每个线程都存在一个从创建、运行到消亡的生命每个线程都存在一个从创建、运行到消亡的生命周期。周期。在生命周期中,一个线程具有创建、可运行、运在生命周期中,一个线程具有创建、可运行、运行中、阻塞和死亡五种状态。行中、阻塞和死亡五种状态。ThreadThread类中的方法可以改变线程的状态。类中的方法可以改变线程的状态。 7.3.1线程的状态线程的状态1. 创建状态创建状态(new thread) 2. 可运行状态(可运行状态(runna

11、ble)3. 运行中状态(运行中状态(running)4. 阻塞状态(阻塞状态(Not runnable) 5. 死亡状态死亡状态(dead)方法方法isAlive用来返回线程的状态。如果此方法返回用来返回线程的状态。如果此方法返回true,线程处于线程处于、或或Not runnable这几种状态之一。这几种状态之一。如果此方法的返回如果此方法的返回false,线程处于线程处于new thread或或dead状态。状态。7.3.2对线程状态的控制对线程状态的控制使线程进入睡眠的使线程进入睡眠的sleep方法方法public static void sleep(long millis) thro

12、ws InterruptedException其中其中millis是指定的睡眠时间。是指定的睡眠时间。暂停线程的暂停线程的yield方法方法public static void yield( )yield方法暂停线程的执行。方法暂停线程的执行。 join方法方法public final void join( ) throws InterruptedExceptionpublic final void join(long millis) throws InterruptedExceptionjoin方法使本线程暂停执行,直到调用该方法的线程执方法使本线程暂停执行,直到调用该方法的线程执行结束后再

13、继续执行本线程。行结束后再继续执行本线程。wait和和notify(notifyall)方法方法 这几个方法在这几个方法在java.lang.Object中。中。 wait方法使当前线程进入阻塞状态,方法使当前线程进入阻塞状态,notify(notifyall)方方法唤醒等待队列中的其它线程,使它们进入可运行状法唤醒等待队列中的其它线程,使它们进入可运行状态态 和中断线程有关的方法和中断线程有关的方法 public void interrupt( ) public void boolean isInterrupted( ) public statick void boolean interru

14、pted( ) 方法方法interrupt为线程设置一个中断标记,当为线程设置一个中断标记,当run方法方法运行时,用运行时,用isInterrupted方法检测此标记。方法检测此标记。 静态方法静态方法interrupted检测线程是否被中断,如果是检测线程是否被中断,如果是则清除中断标记并返回则清除中断标记并返回true。7.4 线程的优先级和调度线程的优先级和调度7.4.1线程的优先级线程的优先级线程的优先级用整数线程的优先级用整数110表示。最低和最高的优先级表示。最低和最高的优先级是是1和和10。默认的优先级为。默认的优先级为5。也可用。也可用Thread类的公用类的公用静态常量表示

15、。静态常量表示。 public static final int NORM_PRIORITY=5 public static final int MIN_PRIORITY=1 public static final int MAX_PRIORITY=10方法方法getPriority用于获得线程优先级用于获得线程优先级public final int getPriority( )方法方法setPriority用于设置线程优先级:用于设置线程优先级: public final setPriority(int newPriority)7.4.2线程的调度线程的调度线程的调度是负责线程排队以及线程的

16、调度是负责线程排队以及CPU在线程之在线程之间的分配。被选中的线程获得处理器进入运行状间的分配。被选中的线程获得处理器进入运行状态。态。线程的调度采用占先原则。线程的调度采用占先原则。对于优先级相同的线程,有分时和独占两种调对于优先级相同的线程,有分时和独占两种调度方式。度方式。7.5 线程组线程组7.5.1线程组线程组线程组把多个线程集合为一个对象。线程组把多个线程集合为一个对象。java.lang包中的包中的ThreadGroup类实现了线程组的创类实现了线程组的创建和对线程组的操作。对线程组的操作就是对线程建和对线程组的操作。对线程组的操作就是对线程组中的所有线程的操作。组中的所有线程的

17、操作。线程组可以形成树形结构。在线程组可以形成树形结构。在java应用程序中,最应用程序中,最高层的组就是高层的组就是main线程组。线程组。7.5.2 ThreadGroup类类 ThreadGroup的构造函数的构造函数public ThreadGroup(String name)创建一个名字为创建一个名字为name的线程组。的线程组。public ThreadGroup(ThreadGroup parent,String name)在线程组在线程组parent中创建一个线程组中创建一个线程组name。ThreadGroup的方法的方法public final String getName

18、( ) 返回线程组的名返回线程组的名public final ThreadGroup getParent( ) 返回线程组的父线程组返回线程组的父线程组public int activeCount( ) 返回当前线程组中活动线程的个数返回当前线程组中活动线程的个数public int enumerate(Thread list )public int enumerate(ThreadGroup list )将当前线程组中的活动线程复制到线程数组或线程组数组中将当前线程组中的活动线程复制到线程数组或线程组数组中public int enumerate(Thread list ,boolean r

19、ecurse)public int enumerate(ThreadGroup list ,boolean recurse)将当前线程组中的活动线程(包括子线程中的)复制到线程数组将当前线程组中的活动线程(包括子线程中的)复制到线程数组或线程组数组中或线程组数组中7.6线程的同步线程的同步7.6.1线程的同步机制线程的同步机制当多个线程对共同的数据进行操作时会产生一些问题。当多个线程对共同的数据进行操作时会产生一些问题。Java语言提供了线程的同步控制机制。语言提供了线程的同步控制机制。对共享数据的线程的对共享数据的线程的“互斥互斥”锁定:锁定:对于共享的数据对象,在任何时刻只能有一个线程对对于共享的数据对象,在任何时刻只能有一个线程对它进行操作。这样可以保证数据的完整和一致。它进行操作。这样可以保证数据的完整和一致。传送数据的线程的同步运行:传送数据的线程的同步运行:为了保证传送的数据能及时正确收到,需要传送数据为了保证传送的数据能及时正确收到,需要传送数据的线程必须同步运行的线程必须同步运行 7.6.2共享数据的互斥锁定共享数据的互斥锁定

温馨提示

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

评论

0/150

提交评论