interrupt方法
當我們調用線程的sleep方法或者join方法時,都可以讓某一些線程處於等待狀態,調用當前線程的interrupt()方法就可以打斷該阻塞狀態。interrupt方法不會讓線程結束。
public void interrupt(); // 中斷線程的阻塞狀態
此方法會拋出一個InterruptedException異常。
案例:演示中斷sleep的等待狀態
線程類:
package com.pbteach.thread;
public class MyThread extends Thread {
@Override
public void run() {
for(int x = 0 ; x < 100 ; x++) {
System.out.println(Thread.currentThread().getName() + "----" + x );
if(x == 10) {
try {
TimeUnit.SECONDS.sleep(10); // 線程休眠以後,該線程就處於阻塞狀態
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
測試類:
package com.pbteach.thread;
public class ThreadDemo {
public static void main(String[] args) {
// 創建MyThread線程對象
MyThread t1 = new MyThread();
t1.setName("pbteach-01");
// 啓動線程
t1.start();
try {
// 主線程休眠2秒
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 中斷t1線程的休眠
t1.interrupt();
}
}
控制檯輸出結果
...
pbteach-01----10
java.lang.InterruptedException: sleep interrupted
at java.base/java.lang.Thread.sleep(Native Method)
at java.base/java.lang.Thread.sleep(Thread.java:339)
at java.base/java.util.concurrent.TimeUnit.sleep(TimeUnit.java:446)
at com.pbteach.javase.thread.api.demo14.MyThread.run(MyThread.java:14)
pbteach-01----11
...
通過控制檯的輸出結果,我們可以看到interrupted方法並沒有去結束當前線程,而是將線程的阻塞狀態中斷了,中斷阻塞狀態以後,線程pbteach-01繼續進行執行。
stop方法
調用線程的stop方法可以讓線程終止執行。
public final void stop() // 終止線程的執行
線程類
package com.pbteach.thread;
public class MyThread extends Thread {
@Override
public void run() {
for(int x = 0 ; x < 100 ; x++) {
System.out.println(Thread.currentThread().getName() + "----" + x );
if(x == 10) {
try {
TimeUnit.SECONDS.sleep(10); // 線程休眠以後,該線程就處於阻塞狀態
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
測試類
package com.pbteach.thread;
public class ThreadDemo1 {
public static void main(String[] args) {
// 創建MyThread線程對象
MyThread t1 = new MyThread();
t1.setName("pbteach-01");
// 啓動線程
t1.start();
try {
// 主線程休眠2秒
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 終止線程t1的執行
t1.stop();
}
}
控制檯輸出結果
...
pbteach-01----9
pbteach-01----10
控制檯沒有任何異常的的輸出,程序結束,"pbteach-01"線程沒有繼續進行執行。