J2EEWeb开发技术(第4章 Java多线程编程)2011年1月.pdf
《J2EEWeb开发技术(第4章 Java多线程编程)2011年1月.pdf》由会员分享,可在线阅读,更多相关《J2EEWeb开发技术(第4章 Java多线程编程)2011年1月.pdf(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1Ch4-1第四章Java多线程编程本章主要内容如下:本章主要内容如下:4.1 多线程的基本概念多线程的基本概念4.2 Java线程类与定义线程的方法线程类与定义线程的方法4.3 Java线程的控制与调度线程的控制与调度4.4 Java多线程的同步机制多线程的同步机制Ch4-24.1 多线程的基本概念多线程的基本概念1.程序程序(Program)是由指令和数据组成的代码集合。每个程序在磁盘上以文件形式进行存储和管理。2.进程进程(Process)是程序在内存中的一次执行。每个进程有自己独立一块内存空间和一组系统资源。同一个程序可能同时创建多个进程。Ch4-34.1 多线程的基本概念多线程的基本
2、概念(续续1)3.线程线程(Thread)一个进程可以启动多个“同时”执行的线程。线程是比进程更小的一次程序块的执行线程是比进程更小的一次程序块的执行。同一进程中的多线程一般共享该进程的存储空间和系统资源,使得系统创建一个线程或在线程间切换时,所花费的代价较小,因此线程常被称为轻负荷进程(light-weight process)。Ch4-44.2 Java线程类与定义线程的方法线程类与定义线程的方法4.2.1 Thread类与类与Runnable接口接口1.Thread类的定义原形类的定义原形public class Thread extends Object implements Runn
3、able2.Runnable接口接口只定义了一个方法:public void run();说明说明:该方法在线程类的对象被创建并启动后,由系统自动调用。它是线程的执行起点。已实现的run方法一般称为该线程对象的线程体线程体。Ch4-54.2 Java线程类与定义线程的方法线程类与定义线程的方法(续续1)3.Thread类的常用成员类的常用成员(1)构造方法构造方法public Thread()public Thread(String name)public Thread(ThreadGroup group,String name)public Thread(Runnable target)pu
4、blic Thread(Runnable target,String name)public Thread(ThreadGroup group,Runnable target)public Thread(ThreadGroup group,Runnable target,String name)Ch4-64.2 Java线程类与定义线程的方法线程类与定义线程的方法(续续2)说明:说明:a.name表示线程名;b.group指明线程所属的线程组ThreadGroup类;c.target指明实际提供线程体的对象,该对象可以是任何用户定义类的一个实例,只要该类实现了Runnable接口。2Ch4-7
5、4.2 Java线程类与定义线程的方法线程类与定义线程的方法(续续3)(2)静态方法静态方法public static Thread currentThread()/返回当前正被执行的线程对象(引用)public static int activeCount()/返回当前线程组中活动线程的数目(3)实例方法实例方法public final String getName()/返回线程名public final void setName(String name)/设置线程名public String toString()/返回名字、优先级和线程组Ch4-84.2 Java线程类与定义线程的方法线程
6、类与定义线程的方法(续续4)public void start()/启动已创建的线程对象public void run()/线程体为空复合语句public final boolean isAlive()/本线程是活动的吗?public final ThreadGroup getThreadGroup()/线程优先级以及线程状态控制相关成员见线程优先级以及线程状态控制相关成员见4.3 节节.4.2.1 定义线程的方法定义线程的方法1.方法一:继承方法一:继承Thread类;覆盖类;覆盖run方法。方法。Ch4-94.2 Java线程类与定义线程的方法线程类与定义线程的方法(续续5)2.方法二:定
7、义实现方法二:定义实现Runnable接口的用户类;创建该类的的一个实体对象;使用带接口的用户类;创建该类的的一个实体对象;使用带target参数的构造函数创建参数的构造函数创建Thread对象。例对象。例4.1 多线程运行的简单示例。主线程主线程main()t1.start();t2.start();t1run()/方法一实现方法一实现t2run()/方法二实现方法二实现Ch4-104.2 Java线程类与定义线程的方法线程类与定义线程的方法(续续6)import java.io.*;class Thd1 extends Thread public Thd1(String name)supe
8、r(name);public void run()System.out.println(getName()+:);for(int i=1;i=100;i+=2)System.out.print(i+);System.out.println(n+getName()+结束!);Ch4-114.2 Java线程类与定义线程的方法线程类与定义线程的方法(续续7)class Thd2 implements Runnable public void run()System.out.println(Thread.currentThread().getName()+:);for(int i=2;i=100;i
9、+=2)System.out.print(i+);System.out.println(n+Thread.currentThread().getName()+结束!);/注意:获得本线程名的方法(红色字体部分)注意:获得本线程名的方法(红色字体部分)Ch4-124.2 Java线程类与定义线程的方法线程类与定义线程的方法(续续8)public class C4_1 public static void main(String args)Thd1 t1=new Thd1(“打印奇数序列进程”);/方法一方法一Thd2 a=new Thd2();Thread t2=new Thread(a,“打印
10、偶数序列进程打印偶数序列进程”);/方法二方法二t1.start();t2.start();System.out.println(当前活动进程数=+t2.activeCount();3Ch4-134.2 Java线程类与定义线程的方法线程类与定义线程的方法(续续9)说明说明:主线程执行时间最短,最先结束;同优先级的两个线程获得执行的机会均等。Ch4-144.2.3 线程组线程组Java的线程组由java.lang包中的ThreadGroup类进行管理。ThreadGroup类将多个线程集成为一个对象,从而可以对其中的多个线程进行同时操作,如启动一个线程组的所有线程等。在Java应用程序中,最高
11、层的线程组是名为main的线程组,在main线程组中可以加入线程或者子线程组,从而形成树状结构的线程关系。4.2 Java线程类与定义线程的方法线程类与定义线程的方法(续续10完完)Ch4-154.3 线程的控制与调度线程的控制与调度4.3.1 Java线程的五种状态线程的五种状态New新建Runnable可运行Running运行中Dead死亡Block阻塞start()调度时间片到1.New(新建新建)状态状态当一个Thread类或其子类的对象被new运算符创建后的状态。此时,系统已为线程分配存储并初始化,但线程尚未进入线程队列,故不能运行。Ch4-164.3 线程的控制与调度线程的控制与调
12、度(续续1)2.Runnable(可运行、就绪可运行、就绪)状态状态线程的start()方法被调用后,从新建状态进入可运行(就绪)状态。就绪状态是指线程已进入线程队列进行排队(等待CPU时间片并执行)但还未被执行的状态。一个处于阻塞状态的线程解除阻塞后,将回到就绪状态。3.Running(运行运行)状态状态线程的run()方法正被CPU执行。Ch4-17如果在一个CPU时间片之内不足以完成该线程的run()方法,系统将保存断点,并强迫该线程重新进入就绪状态(队列)等待下一次执行。当下一次执行开始时,该线程的run()方法将从断点开始执行。4.Dead(死亡死亡)状态状态死亡状态的线程不具有继续
13、运行的能力。有两种情况可以使线程死亡。(1)自然死亡自然死亡执行完run()方法的最后一个语句并退出。4.3 线程的控制与调度线程的控制与调度(续续2)Ch4-184.3 线程的控制与调度线程的控制与调度(续续3)(2)强制死亡强制死亡执行Thread类中的stop()或者destroy()方法。public void stop()public void destroy()throws NoSuchMethodError例如例如:当用户从一个主页切换到另一个主页时,系统会自动调用stop()方法来终止原来主页中正在运行的所有线程。4Ch4-194.3 线程的控制与调度线程的控制与调度(续续4)
14、5.Block(阻塞阻塞)状态状态线程处于阻塞状态时,即使CPU空闲,线程也不能执行。引起阻塞的原因包括:输入/输出、等待消息、睡眠、锁定等。小引小引:isAlive()方法的返回值:当线程处于New或者Dead状态时,返回false;否则(Runnable、Running或Block),返回true。Ch4-204.3 线程的控制与调度线程的控制与调度(续续5)4.3.2 线程优先级线程优先级线程的优先级用整数110表示,1表示优先级最低,5是默认值。Thread类中与优先级有关的成员:public static final int NORM_PRIORITY=5;public static
15、 final int MIN_PRIORITY=1;public static final int MAX_PRIORITY=10;public final int getPriority()/获得线程的优先级public final void setPriority(int no)/设置线程优先级Ch4-214.3 线程的控制与调度线程的控制与调度(续续6)4.3.3 强制改变线程状态的方法强制改变线程状态的方法1.线程挂起与恢复线程挂起与恢复public final void suspend()/挂起本线程到阻塞状态public final void resume()/恢复本线程到就绪状态
16、2.线程睡眠线程睡眠public static void sleep(long millis)throws InterruptedException强迫当前线程进入阻塞状态等待millis毫秒,然后转入就绪状态,获得CPU时间片后,从断点开始继续执行run()方法。Ch4-224.3 线程的控制与调度线程的控制与调度(续续7)3.等待死亡等待死亡public final void join()throws InterruptedException进入阻塞状态,等待本线程死亡。public final void join(long millis)throws InterruptedExcepti
17、on进入阻塞状态,等待本线程死亡,若等待时间超过millis毫秒后仍未死亡,则转入就绪状态。如果millis参数为0,则相当于永远等待。public final void join(long millis,int nanos)throws InterruptedException最多等待millis毫秒+nanos纳秒Ch4-234.3 线程的控制与调度线程的控制与调度(续续8)4.暂停线程暂停线程public static void yield()暂停当前线程执行,允许其他同优先级的线程先执行。当前线程被暂停后仍然处于就绪状态。若无其他同优先级的线程,则系统选中该线程继续执行。5.中断线程中
18、断线程public void interrupt()设置本线程的中断标志为true;Ch4-244.3 线程的控制与调度线程的控制与调度(续续9)若线程正处于阻塞状态(wait、sleep或join引起),则抛出InterruptedException异常并重设中断标志为false.public boolean isInterrupted()返回本线程中断标志的值。public static boolean interrupted()返回本线程中断标志的值;若返回值为true,则清除中断标志(设置中断标志为false)。5Ch4-254.3 线程的控制与调度线程的控制与调度(续续10)6.线程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- J2EEWeb开发技术第4章 Java多线程编程2011年1月 J2EEWeb 开发 技术 Java 多线程 编程 2011
限制150内