当前位置:文档之家› JAVA程序设计_Java多线程机制_

JAVA程序设计_Java多线程机制_

通过继承Thread类来创建并启动多线程的一般步骤如下 (1)定义Thread类的一个子类 (2)在子类中重写父类的run()方法
其目的是规定线程的具体操作——线程的执行体
(3)创建该子类的一个线程对象 (4)通过start()方法启动线程 例子见例1
继承Thread类创建线程 示例
例子1: 在主线程中,用Thread的子类创建了2个线程。
轿车8 轿车9
主人8 主人9
轿车10
主人10
线程的创建方式二:使用Runnable接口
由于Java不支持多继承,在已有一个父类的情况下不能再 对Thread扩展。这种情况下可以通过实现接口Runnable来 创建线程类。
Runnable接口中只声明了一个方法run(),所以实现该接 口的类必须重写该方法。
}
class ElephantTarget implements Runnable { public void run() { for (int i = 1; i <= 10; i++) { System.out.println("大象" + i ); } }
}
主人1
轿车1
public class Example12_2 {
CarTarget car= new CarTarget(); //speakCar线程的轿 轿目车 车34标对象
speakElephant = new Thread(elephant); // 创建线轿 大车 象程57
speakCar = new Thread(car); // 创建线程 speakElephant.start(); // 启动线程
System.out.println("大象" + i );
} } }
class SpeakCar extends Thread { public void run() { for (int i = 1; i <=10; i++) {
System.out.println("轿车" + i);
} } }
使用Runnable接口 示例
通过实现Runnable接口创建并启动线程一般步骤如下:
(1)定义一个实现Runnable接口的类。在该类中,重写run()方 法,它是线程的执行体。
(2)创建Runnable实现类的实例,并用这个实例作为Thread的
target来创建Thread对象,这个Thread对象才是真正的线程对象。 (3)通过调用线程对象的start()方法来启动线程。
仍然要使用线程类的对象。Thread类共有8个构造方法, 其中一个构造方法:Thread(Runnable target) 由参数target提供run()方法。当线程调用start()方 法后,一旦轮到它来使用CPU资源, target目标对象 就会自动调用接口中的run()方法(接口回调)。
Java多线程机制2
模块导航
Thread类与线程的创建 线程的常用方法
Thread类与线程的创建
Java使用Thread类代表线程,所有的线程 对象都必须是Thread类或其子类的实例。
常用的两种创建线程方式如下:
1)继承Thread类创建线程 2)实现Runnable接口创建线程
线程的创建方式一:继承Thread类创建线程
主人1
主人1
public class Example12_1 {
大象1 轿车1
轿车1 轿车2
public
static
void
main(String
args[])
{
//
主线程
大象2 主人2
轿车3 轿车4
SSppeeaakkEClaerphsapnetakCsapreak=ElneepwhaSnpteak=Canrew();Spe/a/kE创l建ep线ha程nt主 主 主(人 人 人)345;//创建线程轿 轿 轿车 车 车567
大象3 大象4 大象5
}
大象6 大象7
大象6 大象7
}
大象8 大象9
大象8 大象9
}
大象10
大象10
轿车2
轿车10
主人10
主人2
轿车3
主人3
由两次运行结果,可以看出,例子1在不同的计算机运
轿车4 轿车5
主人4 主人5行或在同源自台计算机反复运行的结果不尽相同,说明多
轿车6 轿车7
主人6 主人7
线程并发执行输出结果依赖当前CPU资源的使用情况。
speakElephant.start(); // 启动线程
主人6 主人7
轿车8 轿车9
speakCar.start(); // 启动线程
主人8 主人9
大象1 大象2
for (int i = 1; i <= 10; i++) { System.out.println("主人" + i);
大象3 大象4 大象5
轿车2
public static void main(String args[]) {
大象1 大象2
Thread speakElephant,speakCar; // 用Thread声明主 大线人 象程23
ElephantTarget elephant= new
大象4
大象5
ElephantTarget();//speakElephant线程的目标对象大象6
SpeakElephant线程:实现在命令行窗口输出10句“大 象”;
SpeakCar线程:实现在命令行窗口输出10句“轿车”; 主线程:实现在命令行窗口输出10句“主人”。
通过分析运行结果阐述线程的几种状态。
class SpeakElephant extends Thread { public void run() { for (int i = 1; i <=10; i++) {
例子2 实现与例子1相同的功能,包含3个类的源文件:
Example12_2.java, ElephantTarget.java , CarTarget.java。
与例1不同,使用Runnable接口创建speakElephant和speakCar线程
class CarTarget implements Runnable { public void run() { for (int i = 1; i <= 10; i++) { System.out.println("轿车" + i ); } }
相关主题