JAVA(线程)——线程的启动与结束
程序员文章站
2024-03-05 18:36:13
...
实例描述
在JAVA中,有两种方法可以创建线程:一种是继承Thread类;另一种是实现Runnable接口。不管采用哪种方式,都要用到JAVA类库中的Thread类及相关方法。本实例将展示如何启动和结束线程
运行代码
import java.util.Date;
public class StartThread {
public void startY() {
ThreadY ty = new ThreadY(); // 创建实例
ty.startThreadY(); // 启动ThreadY线程
try {
Thread.sleep(1000); // 当前线程休眠一秒
} catch (InterruptedException e) {
e.printStackTrace();
}
ty.stopThreadY(); // 停止ThreadY线程
}
public void startX() { // 开始第二个
Runnable runnX = new ThreadX(); //创建实例
Thread threadX = new Thread(runnX); // 将实例放入线程中
threadX.start(); // start()方法启动线程
}
public static void main(String[] args) { // 在JAVA程序主入口处
StartThread test = new StartThread(); // 实例化对象
test.startY(); // 调用方法
test.startX();
}
}
class ThreadY extends Thread { // 继承java.lang.Thread类定义线程
private boolean isRunState = false; // 标记线程是否需要运行
public void start() { // 覆盖了父类的start方法
this.isRunState = true; // 将isRunState置为true,表示线程需要运行
super.start();
}
public void run() {
int i = 0;
try {
while (isRunState) {// 如果isRunState为真,说明线程还可以继续运行
this.setName("Thread-" + i++);
System.out.println("线程Y: " + this.getName() + "正在运行");
Thread.sleep(200); // sleep()方法将当前线程休眠
}
} catch (Exception e) {
// 捕获异常
}
System.out.println(this.getName() + " 运行结束...");
}
public void setRunning(boolean isRunState) { // 设置线程
this.isRunState = isRunState;
}
public void startThreadY() { // 启动线程
System.out.println("启动线程Y...");
this.start();
}
public void stopThreadY() { // 停止ThreadY线程
System.out.println("结束线程Y...");
this.setRunning(false);
}
}
class ThreadX implements Runnable { // 实现java.lang.Runnable接口定义线程
private Date runDate; // 线程被运行的时刻
public void run() {
System.out.println("线程X已经启动...");
this.runDate = new Date();
System.out.println("启动时间: " + runDate.toString());
}
}
运行结果
代码解析
在传统程序语言中,运行的顺序总是按照一定的流程来进行的,即使遇到选择、循环语句也是一次只能运行一个程序块。Java多线程打破了这种束缚,使程序可以同时运行多个程序块,使程序运行的效率变得更高。例如,有些包含循环的线程可能要使用比较长的一段时间来运行,此时便可让另一线程来做其他处理。如图所示:
知识拓展
使用多线程,首先要学会创建多线程。Java中创建多线程有两种方式:继承Thread类和实现Runnable接口。
- Thread类存放在java.lang类库,因为它会自动加载。run()方法是定义在Thread类里的一个方法,因此把线程的程序代码编写在run()方法内,事实上就是覆盖的操作。可按照如下图的方式来编写一个多线程:
- Runnable接口:
如果自定义的线程还要继承其他类,这是就不能采用第一种方式来创建。由于Java语言不支持类的多继承,却可以实现多个接口,所以这种情况就可以采用实现Runnable接口的方式创建。通常实现Runnable接口创建线程的语法格式如图示:
上一篇: Java的 深拷贝 和 浅拷贝
下一篇: 六、Java IO流 之内存操作流