资源说明: Java终止线程实例和stop()方法源码阅读
Java 中的线程是程序中的执行单元,Java 虚拟机允许应用程序并发地运行多个执行线程。每个线程都拥有状态,表示线程的状态,同一时刻中,JVM 中的某个线程只有一种状态。线程的状态主要有五种:NEW 尚未启动的线程、RUNNABLE 可运行的线程、BLOCKED 阻塞的线程、WAITING 无限等待、TIMED_WAITING 定时等待、TERMINATED 已退出的线程。
线程的状态转换是通过调用 Thread 对象的方法来实现的,例如,调用 start() 方法可以将线程从 NEW 状态转换到 RUNNABLE 状态,调用 sleep() 方法可以将线程从 RUNNABLE 状态转换到 TIMED_WAITING 状态。
在 Java 中,线程的终止主要有两种方法:使用退出标志和使用 interrupt() 方法。使用退出标志的方法是通过设置一个 boolean 类型的标志,线程可以根据这个标志来判断是否需要退出。使用 interrupt() 方法的方法是通过调用 Thread 的 interrupt() 方法,线程可以捕捉到 InterruptedException 并终止自己的执行。
在 Java 中,stop() 方法已经被弃用,因为它可能会导致线程安全问题。因此,应该使用 interrupt() 方法来终止线程。
下面是一个使用退出标志终止线程的例子:
```java
public class FlagExitThread extends Thread {
public volatile Boolean isExit = false;
public FlagExitThread(String name) {
super(name);
}
@Override
public void run() {
while (!isExit) {
System.out.println("I'm running");
}
}
}
public class DemoClient {
public static void main(String[] args) {
System.out.println("优雅的终止线程实例");
exitByFlag();
}
private static void exitByFlag() {
FlagExitThread flagExitThread = new FlagExitThread(FlagExitThread.class.getSimpleName());
flagExitThread.start();
try {
Thread.sleep(1000);
flagExitThread.isExit = true;
flagExitThread.join();
System.out.println("线程退出");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
```
这个例子中,我们创建了一个 FlagExitThread 线程,并在 run() 方法中使用 while 循环来不断打印 "I'm running"。在 main() 方法中,我们创建了一个 FlagExitThread 对象,并启动它,然后使用 Thread.sleep() 方法来等待一段时间,最后将 isExit 标志设置为 true,以终止线程。
Java 中的线程终止可以使用退出标志或 interrupt() 方法来实现,但是一定要避免使用已弃用的 stop() 方法,以免出现线程安全问题。
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。