java怎么停止线程

1、使用Interrupt来通知

while (!Thread.currentThread().isInterrupted() &
&
more work to do) { do more work }

首先通过 Thread.currentThread().isInterrupt() 判断线程是否被中断,随后检查是否还有工作要做。

public class StopThread implements Runnable {

Java线程如何优雅地停止



@Override
public void run() {

int count = 0;


while (!Thread.currentThread().isInterrupted() &
&
count <
1000) {

System.out.println("
count = "
+ count++);


}

}

public static void main(String[] args) throws InterruptedException {

Thread thread = new Thread(new StopThread());

thread.start();

Thread.sleep(5);

thread.interrupt();

}

}

2、使用volatile标志一个字段,通过判断这个字段true/false退出线程

/**
* 描述: 演示用volatile的局限:part1 看似可行
*/
public class WrongWayVolatile implements Runnable {

private volatile boolean canceled = false;


@Override
public void run() {
int num = 0;

try {
while (num <
= 100000 &
&
!canceled) {
if (num % 100 == 0) {
System.out.println(num + "
是100的倍数。"
);

}
num++;

Thread.sleep(1);

}
} catch (InterruptedException e) {
e.printStackTrace();

}
}

public static void main(String[] args) throws InterruptedException {
WrongWayVolatile r = new WrongWayVolatile();

Thread thread = new Thread(r);

thread.start();

Thread.sleep(5000);

r.canceled = true;

}
}

Java中的线程是一种基本的多线程既可以同时运行来完成不同任务,也可以在不同时间点被启动或停止。然而,如何停止Java线程并不像启动线程那么简单。本文将介绍三种优雅地停止Java线程的方法。
方法一:使用volatile关键字
当线程执行的代码在一个循环中时,可以使用volatile关键字来通知线程要停止。具体实现方法是在线程中定义一个boolean类型的变量flag,并在while循环的判断条件中使用该标志位。当需要停止线程时,只需要将该变量设为false,这样线程就会停止。当线程检测到flag为false时,线程会自行停止。
方法二:使用interrupt()方法
另一种方法是使用线程的interrupt()方法。当线程执行过程中需要停止时,可以调用线程的interrupt()方法,将线程的中断标志位设为true。线程中断标志位为true时,线程就会停止运行。
方法三:使用Thread.stop()方法
Thread.stop()方法是一种强行停止线程的方法,但是不推荐使用。因为该方法会强行终止线程之前的操作,使得线程不能够完成清理工作。该方法会造成资源的浪费和数据的丢失,应该尽可能避免使用。如果非得使用Thread.stop()方法的话,可以通过捕获ThreadDeath异常来使线程正确地终止。
总结
优雅地停止Java线程是保证多线程程序正确性的关键。使用volatile关键字或interrupt()方法都是比较安全的方法,相对而言,Thread.stop()方法更加强制和危险。在使用时,应该根据具体情况选择适当的方法。