java线程中断的方法。
Thread.stop()
stop方法可以直接结束线程,并立即会释放掉该线程持有的锁,方法过去暴力容易造成数据不一致。目前属于废弃方法不建议直接使用。
public class ThreadInteruptTest {
@SuppressWarnings("deprecation")
public static void main(String[] args) {
Thread tA = new Thread(new Runnable() {
@Override
public void run() {
while(true) {
System.out.println("A thread runnint ...");
}
}
});
tA.start();
tA.stop();
}
}
Thread.interrupt()
通过interrupt方法,可以给线程设立个中断标记。结合Thread.isInterrupted()方法和static Thread.interrupted()方法来判断是否终止线程。Thread.isInterrupted()不会清除中断标记。static Thread.interrupted()会清除中断标记。
public class ThreadInteruptTest {
public static void main(String[] args) {
Thread tA = new Thread(new Runnable() {
@Override
public void run() {
while(true) {
if(Thread.currentThread().isInterrupted()) {//Thread.interrupted()
System.out.println("A thread exit ...");
break;
}
System.out.println("A thread runnint ...");
}
}
});
tA.start();
tA.interrupt();
}
}
Thread.sleep(time)
Thread.sleep方法会因中断抛出InterruptedException异常。如果线程中包含sleep方法休眠。sleep方法抛出InterruptedException异常时会清除中断标记。我们需要手动捕获异常重新设置中断标记。
public class ThreadInteruptTest {
public static void main(String[] args) {
Thread tA = new Thread(new Runnable() {
@Override
public void run() {
while(true) {
if(Thread.currentThread().isInterrupted()) {//Thread.interrupted()
System.out.println("A thread exit ...");
break;
}
System.out.println("A thread runnint ...");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
});
tA.start();
tA.interrupt();
}
}