§ 2.1线程概述
? Java的重要特性之一在于其内置的多线程支持 。
? 多线程:指系统同时运行多个执行体的能力 。
2.1.1进程
? 进程是一个具有一定独立功能的程序关于某个
数据集合的一次运行活动 。
? 三种不同的进程状态,
运行态
就绪态 等待态
选中
落选
出现等待事件
等待事件结束
2.1.2线程
? 线程( Thread)是进程内一个相对独立的、可
调度的执行单元。
线程与进程
? 两者一样, 都是现实并发性的一个基本单位 。 区别
如下:同样作为基本的执行单元, 线程 的划分比进
程小, 因而支持多线程的系统要比只支持多进程的
系统并发度高 。
? 进程把内存空间作为自己的资源之一, 每个进程均
有自己的内存单元 。
? 与之相反, 线程 却共享内存单元, 通过共享的内存
空间来交换信息, 从而有利于提高执行效率 。
? Win NT,2000,Mach 3.0,Solaris等皆支持 多线程 。
2.1.3线程的实现( Thread类)
? Java实现多线程有两种方式
? ( 1) 创建类 Thread 的子类, 并覆盖其
run() 方法 。
? Java.lang.Thread类用于在多线程应用程序构
造和访问单个的多线程 。
? 方法,
? class 类名 extends Thread
? 示例 2.1.1 设计两个轮流执行的线程, 一个取名
为, Java”,另一个取名为, C++”,每个过程循
环输出 5次线程, 每输出一次线程名切换一次 。
说明
? 线程要执行的语句都放在 run()方法中。
? 在示例 2.1.1中启动的两个并发线程 runThread1
和 runThread2,系统内部可以有不同的执行顺
序。所以图 2.1.2所示的并不是本例的唯一结果。
2.1.4线程的实现( Runnable接口)
? ( 2)根据 Runnable 接口创建一个类
? applets扩展自 Applet类,Java不支持多重继承。因
此不能由 Applet类和 Thread类派生。 Java提供
Runnable接口来解决这个问题。
class 类名 implements Runnable
{
public void run()
{
//方法体
}
}
? 以此方式创建的类可以通过把类实例传递给一线程对象而在一线程体内运
行 。
方式为,
类名 类实例名 /对象 = new 类名 ();
new Thread(类实例名 /对象 ).start();
? 示例 2.1.1 用 Runnable接口的方法创建线程做一个定
位的数字时钟的 applet。
说明
? AWT为每个处理程序创建一个新的线程 。 要让
应用程序和小程序独立做事情, 就必须自己创
建线程 。 Java 应用程序中的所有线程都用到
java.lang.Thread类 。
? 要使用线程创建 applet,必须进行下面的步骤,
? 1,改变 applet 类的说明, 以包含 implements
Runnable
public class DigitalClock extends Applet
implements Runnable {
? 2, 包含一个数据成员, 用以保存该
applet 的线程
Thread thRunner;
? 3,增加 start () 方法, 让它什么也不做, 但产
生一个线程并能启动它运行
public void start() {
if (thRunner == null) {
thRunner = new Thread(this);
thRunner.start();
}
}
? 4、创建一个包含启动 applet 实际代码的 run()方法
public void run() {
while (true) {
dte = new Date();
repaint();
try {
Thread.sleep(1000);
} catch (Exception e) {
}
}
}
? 5,添加 stop() 方法, 以使浏览器在离开页面时
终止该线程的执行
public void stop() {
if (thRunner != null) {
thRunner = null;
}
}
任务解决
? 计算机在处理文件的输入、输出时要占用大量
的 CPU资源。
? 我们可以将文件的输入、输出等操作作为一个
写文件线程交给计算机后台处理,并在同时在
前台执行其它的操作,即运行其它的线程。
? 通过本节线程知识的学习,我们可以使用多线
程技术来完成 HNS软件学院图书馆管理系统中
用户信息的后台存储功能。
? 1、在 TimeShow的 Applet程序中使用 Runnable
接口方法创建多线程。
? 2、自定义 FileBackup类,其功能是存储用户信
息。
? 3、自定义的 UserRecord类。其功能是产生序
列化的用户信息(直接引用 § 1.3中的定义)。