cahpter9多线程

上传人:新** 文档编号:490398665 上传时间:2022-10-27 格式:DOC 页数:4 大小:256.50KB
返回 下载 相关 举报
cahpter9多线程_第1页
第1页 / 共4页
cahpter9多线程_第2页
第2页 / 共4页
cahpter9多线程_第3页
第3页 / 共4页
cahpter9多线程_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《cahpter9多线程》由会员分享,可在线阅读,更多相关《cahpter9多线程(4页珍藏版)》请在金锄头文库上搜索。

1、8.2 Java多线程机制l 多线程是为一个程序开辟多条执行路线,让一个程序按照多条不同的执行路线共同工作。通过多线程可以方便地开发出能够处理多个任务的应用程序。l 多线程的程序能更好地表述和解决现实世界的具体问题,是计算机应用开发和程序设计的一个必然发展趋势。Java语言的重要特点是支持多线程。 l 多线程编程展示1 源程序Clock.java 多线程编程展示2 源程序ThreeThread.java8.2.1 基本概念 1.程序、进程与线程l 程序是一段静态代码,它是应用程序执行的蓝本。进程是程序的一次动态执行过程,它对应从代码加载、执行到执行完毕的一个完整过程,这个过程也是进程本身从产生

2、、发展到消亡的过程。程序是静态的,它就是一段代码。进程是动态的,同一程序每次的执行过程可能不同。l 线程是比进程更小的执行单位,是进程内的顺序控制流。一个进程中可以包含多个线程,每个线程对应程序的一条执行路线,多个线程构成同一程序的多条执行路线。线程是动态的。进程中的每个线程都有产生、存在和消亡的过程。进程由操作系统管理,线程由进程控制。l 每个进程拥有一段专用的内存区域。一个进程内的多个线程可以共享内存单元,利用这些共享单元实现数据交换、通信与必要的同步操作。2.线程的生命周期与状态l 默认情况下,每个Java程序都只有一个执行路线,即只有一个线程,称该线程为主线程。对于Applicatio

3、n程序,主线程是main()方法的执行路线。对于Applet程序,主线程是让浏览器加载并执行Java小程序。l 要为程序开辟多条执行路线,即实现多线程,必须创建新线程。Thread类以及子类用于创建线程对象,每个线程对象对应一个线程,是程序的一条执行路线。l 每个线程都有一个从诞生到消亡的生命周期。线程在生命周期中通常要经历五种状态,分别是新建状态、就绪状态、运行状态、阻塞状态和消亡状态。(1)新建状态新建状态是线程的第一个状态。新建线程对象处于新建状态。例如:Thread myThread=new Thread();(2)就绪状态l 状态也称可运行状态。启动新建状态的线程使它进入就绪状态。l

4、 Java通过start()方法启动线程。例如:myThread.start();l 就绪状态的线程已经具备运行条件,它进入就绪队列排队,等待运行。(3)运行状态l 当就绪状态的线程被选中并开始运行,则进入运行状态。在Java中,执行run()方法进入运行状态。l Thread类及其子类都定义了空的run()方法。要实现线程的操作和功能,需要重载run()方法,即在run()方法中编写具体语句。(4)阻塞状态l 阻塞状态也称挂起状态。一个正在执行的线程在某些情况下会暂时中止运行,从运行状态变成阻塞状态。以下操作都会使线程进入阻塞状态。调用sleep()方法使线程进入睡眠状态。调用suspend

5、()方法使线程进入挂起状态。为等待一个条件变量,调用wait()方法。执行费时的输入或输出操作。l 只有消除引起阻塞的原因,处于阻塞状态的线程才可以转入就绪状态,重新进到就绪队列中排队,以便从中止处继续运行。(5)消亡处于消亡状态的线程不具有继续运行的能力。线程消亡的原因有两个。l 一是线程完成它的全部工作,正常结束运行,即执行完run()方法中的每条语句后退出。l 二是线程被提前强制终止,如执行stop()方法或destroy()终止线程。8.2.2 实现多线程l 用Java程序实现多线程有两种途径:一种是创建线程类Thread的子类,一种是定义类实现Runnable接口。l 无论哪种途径,

6、都要使用Thread类及其方法,都要在线程的run()方法中编写实现线程具体操作的语句。1.Thread类创建线程需要使用线程类Thread。Thread类综合了一个线程拥有的属性和方法。(1)Thread类的构造方法public Thread():创建一个线程对象。public Thread(String threadName):创建一个线程对象,并为它指定一个字符串名称供以后使用。public Thread(Runnable target):创建一个线程对象,并为它指定一个实现Runnable接口的对象。public Thread(Runnable target,String thread

7、Name):创建一个线程对象,并为它指定实现Runnable接口的对象和字符串名称。利用构造方法创建新线程对象之后,该对象的有关数据被初始化,并进入线程生命周期的第一个状态(新建状态)。(2)与线程运行和线程状态有关的方法public void start():用于启动线程对象。线程对象被启动后,由新建状态转入就绪状态,并进入就绪队列排队,等待运行。public void run():用于定义线程执行的操作。Thread类和Runnable接口都包括空的run()方法,两者的作用相同。要赋予线程具体功能,就要实现run()方法。public void sleep(long millisenco

8、nd):用于使正在执行的线程暂时睡眠,睡眠时间由参数millisencond决定。millisecond以毫秒为单位。线程的调度执行按照线程优先级进行。当优先级高的线程未完成时,优先级低的线程没有机会获得处理器。如果优先级高的线程需要完成一些费时的操作,或者需要优先级低的线程做一些配合工作,那么优先级高的线程应该让出处理器资源,睡眠一段时间,使优先级低的线程有机会执行。为实现这一目的,可调用sleep()方法。public boolean isAlive():用于判断线程是否存活。public void stop():用于终止线程。(3)与线程优先级有关的常量和方法每个线程都有一个优先级。Ja

9、va为线程规定1至10十种优先级。Thread类提供表示线程优先级的静态常量和与优先级有关的方法。Thread.MAX_PRIORITY:代表最高优先级,通常为10。Thread.MIN_PRIORITY:代表最小优先级,通常为1。Thread.NORM_PRIORITY:代表普通优先级,缺省数值为5。public void setPriority(int priority):设置线程的优先级。public int getPriority():获取线程的优先级。(4)其他方法public String getName():获得线程的字符串名称。public void setName(Strin

10、g name):为线程对象设置字符串名称。public int activeCount():获得当前存活的线程个数。public Thread currentThread():获得当前正在运行的线程对象。2.实现多线程每个Java程序默认只有一个线程(主线程)。定义新线程是实现多线程的基本工作。(1)通过Thread类的子类实现多线程主要涉及以下工作:定义一个Thread类的子类,用该子类表示用户线程类。在用户线程类中重写run()方法,使run()方法包含用户线程的操作。建立用户线程类对象。调用start()方法启动线程,以便执行run()方法。(2)通过Runnable接口实现多线程主要涉

11、及以下工作:定义类实现Runnable接口,用该类表示用户线程类。在用户线程类中重写run()方法。建立用户线程类对象。调用start()方法启动线程。 例 通过Runnable接口实现多线程。显示时间程序如下:import java.awt.*;import java.applet.*;import java.util.*;public class displayTime extends Applet implements RunnableThread clockThread; Font f=new Font(宋体,Font.BOLD,20);public void start() setF

12、ont(f);if (clockThread=null) clockThread=new Thread(this,Clock);clockThread.start();public void run() /实现Runnable接口中空的run()方法 while(clockThread!=null) repaint();try clockThread.sleep(1000); catch(InterruptedException e) return; public void paint(Graphics g) Date now=new Date(); /创建时间类对象 g.drawString(now.getHours()+:+now.getMinutes()+:+now.getSeconds(),20,30);public void stop()clockThread.stop();clockThread=null;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 幼儿/小学教育 > 小学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号