成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試突擊:如何正確停止線程?

開(kāi)發(fā) 前端
自定義中斷標(biāo)識(shí)也有一些問(wèn)題,所以綜合來(lái)看,interrupt 方法才是最理想的停止線程的方法,接下來(lái)我們一起來(lái)看它們的具體差異。

在 Java 中停止線程的實(shí)現(xiàn)方法有以下 3 種:

  • 自定義中斷標(biāo)識(shí)符,停止線程。
  • 使用線程中斷方法 interrupt 停止線程。
  • 使用 stop 停止線程。

其中 stop 方法為 @Deprecated 修飾的過(guò)期方法,也就是不推薦使用的過(guò)期方法,因?yàn)?stop 方法會(huì)直接停止線程,這樣就沒(méi)有給線程足夠的時(shí)間來(lái)處理停止前的保存工作,就會(huì)造成數(shù)據(jù)不完整的問(wèn)題,因此不建議使用。而自定義中斷標(biāo)識(shí)也有一些問(wèn)題,所以綜合來(lái)看,interrupt 方法才是最理想的停止線程的方法,接下來(lái)我們一起來(lái)看它們的具體差異。

1.自定義中斷標(biāo)識(shí)符

自定義中斷標(biāo)識(shí)符就是在程序中定義一個(gè)變量來(lái)決定線程是否要中斷執(zhí)行,具體實(shí)現(xiàn)代碼如下:

class FlagThread extends Thread {
// 自定義中斷標(biāo)識(shí)符
public volatile boolean isInterrupt = false;
@Override
public void run() {
// 如果為 true -> 中斷執(zhí)行
while (!isInterrupt) {
// 業(yè)務(wù)邏輯處理
}
}
}

但自定義中斷標(biāo)識(shí)符的問(wèn)題在于:線程中斷的不夠及時(shí)。因?yàn)榫€程在執(zhí)行過(guò)程中,無(wú)法調(diào)用 while(!isInterrupt) 來(lái)判斷線程是否為終止?fàn)顟B(tài),它只能在下一輪運(yùn)行時(shí)判斷是否要終止當(dāng)前線程,所以它中斷線程不夠及時(shí),比如以下代碼:

class InterruptFlag {
// 自定義的中斷標(biāo)識(shí)符
private static volatile boolean isInterrupt = false;

public static void main(String[] args) throws InterruptedException {
// 創(chuàng)建可中斷的線程實(shí)例
Thread thread = new Thread(() -> {
while (!isInterrupt) { // 如果 isInterrupt=true 則停止線程
System.out.println("thread 執(zhí)行步驟1:線程即將進(jìn)入休眠狀態(tài)");
try {
// 休眠 1s
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("thread 執(zhí)行步驟2:線程執(zhí)行了任務(wù)");
}
});
thread.start(); // 啟動(dòng)線程

// 休眠 100ms,等待 thread 線程運(yùn)行起來(lái)
Thread.sleep(100);
System.out.println("主線程:試圖終止線程 thread");
// 修改中斷標(biāo)識(shí)符,中斷線程
isInterrupt = true;
}
}

以上代碼的執(zhí)行結(jié)果如下圖所示:

我們期望的是:線程執(zhí)行了步驟 1 之后,收到中斷線程的指令,然后就不要再執(zhí)行步驟 2 了,但從上述執(zhí)行結(jié)果可以看出,使用自定義中斷標(biāo)識(shí)符是沒(méi)辦法實(shí)現(xiàn)我們預(yù)期的結(jié)果的,這就是自定義中斷標(biāo)識(shí)符,響應(yīng)不夠及時(shí)的問(wèn)題。

2.interrupt中斷線程

使用 interrupt 方法可以給執(zhí)行任務(wù)的線程,發(fā)送一個(gè)中斷線程的指令,它并不直接中斷線程,而是發(fā)送一個(gè)中斷線程的信號(hào),把是否正在中斷線程的主動(dòng)權(quán)交給代碼編寫(xiě)者。相比于自定義中斷標(biāo)識(shí)符而然,它能更及時(shí)的接收到中斷指令,如下代碼所示:

public static void main(String[] args) throws InterruptedException {
// 創(chuàng)建可中斷的線程實(shí)例
Thread thread = new Thread(() -> {
while (!Thread.currentThread().isInterrupted()) {
System.out.println("thread 執(zhí)行步驟1:線程即將進(jìn)入休眠狀態(tài)");
try {
// 休眠 1s
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println("thread 線程接收到中斷指令,執(zhí)行中斷操作");
// 中斷當(dāng)前線程的任務(wù)執(zhí)行
break;
}
System.out.println("thread 執(zhí)行步驟2:線程執(zhí)行了任務(wù)");
}
});
thread.start(); // 啟動(dòng)線程

// 休眠 100ms,等待 thread 線程運(yùn)行起來(lái)
Thread.sleep(100);
System.out.println("主線程:試圖終止線程 thread");
// 修改中斷標(biāo)識(shí)符,中斷線程
thread.interrupt();
}

以上代碼的執(zhí)行結(jié)果如下圖所示:

從上述結(jié)果可以看出,線程在接收到中斷指令之后,立即中斷了線程,相比于上一種自定義中斷標(biāo)識(shí)符的方法來(lái)說(shuō),它能更及時(shí)的響應(yīng)中斷線程指令。

3.stop停止線程

stop 方法雖然可以停止線程,但它已經(jīng)是不建議使用的廢棄方法了,這一點(diǎn)可以通過(guò) Thread 類中的源碼發(fā)現(xiàn),stop 源碼如下:

從上面的圖片可以看出,stop 方法是被 @Deprecated 修飾的不建議使用的過(guò)期方法,并且在注釋的第一句話就說(shuō)明了 stop 方法為非安全的方法。在最新版本 Java 中,此方法已經(jīng)被直接移除了,所以強(qiáng)烈不建議使用。

總結(jié)

本文介紹了停止線程的 3 種方法:

  • 自定義中斷標(biāo)識(shí)符的停止方法,此方法的缺點(diǎn)是不能及時(shí)響應(yīng)中斷請(qǐng)求;
  • 使用 interrupt 中斷線程方法,此方法是發(fā)送一個(gè)中斷信號(hào)給線程,它可以及時(shí)響應(yīng)中斷,也是最推薦使用的方法;
  • 最后是 stop 方法,雖然它也可以停止線程,但此方法已經(jīng)是過(guò)時(shí)的不建議使用的方法,在 Java 最新版本中已經(jīng)被直接移除了,所以不建議使用。
責(zé)任編輯:武曉燕 來(lái)源: Java面試真題解析
相關(guān)推薦

2023-09-08 12:19:01

線程方法interrupt

2025-02-06 03:14:38

2022-03-28 08:31:29

線程池定時(shí)任務(wù)

2022-04-06 07:50:28

線程安全代碼

2022-04-18 07:36:37

TimeUnit線程休眠

2022-03-23 08:51:21

線程池Java面試題

2022-03-14 07:32:06

線程池拒絕策略自定義

2022-01-24 07:01:20

安全多線程版本

2022-02-08 07:02:32

進(jìn)程線程操作系統(tǒng)

2022-07-06 07:35:19

group byMySQL

2022-03-30 08:54:21

線程 Thread判斷線程池任務(wù)Java

2022-04-13 14:43:05

JVM同步鎖Monitor 監(jiān)視

2022-09-12 22:27:05

編程式事務(wù)聲明式事務(wù)對(duì)象

2022-03-07 07:33:16

線程池Java語(yǔ)言

2022-03-16 07:33:40

守護(hù)線程用戶線程語(yǔ)言

2022-04-11 07:40:45

synchroniz靜態(tài)方法程序

2022-07-11 07:10:48

HTTP協(xié)議類型

2022-03-02 07:36:37

池化技術(shù)Java線程池

2022-09-07 07:05:25

跨域問(wèn)題安全架構(gòu)

2022-04-07 07:40:40

線程安全變量
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产乱码精品一区二区三区中文 | 国产区在线观看 | 4h影视| 久久久久电影 | 国产亚洲精品美女久久久久久久久久 | 天天射网站 | 国产人成精品一区二区三 | 中文成人无字幕乱码精品 | 色综合欧美 | 亚洲成人精品 | 都市激情亚洲 | 亚洲va国产日韩欧美精品色婷婷 | 91精品久久久久久久久中文字幕 | 午夜精品一区 | 老妇激情毛片免费 | 国产精品中文字幕在线观看 | 欧美中文字幕一区二区 | 久久亚洲欧美日韩精品专区 | 亚洲国产一区二区三区 | 综合五月婷 | 国产欧美一区二区三区在线看蜜臀 | 欧美一区二区三区视频在线播放 | 狠狠干av | 一区二区精品视频 | 欧美电影一区 | 午夜www| av网站免费观看 | 欧美日韩中文在线 | 精品少妇v888av | 96久久久久久 | 嫩草视频在线 | 国产精品a久久久久 | 国产9999精品 | 国产亚洲精品久久yy50 | 成人毛片在线观看 | 国产美女免费视频 | 亚洲美女网站 | 99精品网| 欧美日韩亚洲一区 | 中文字幕精品一区二区三区精品 | 欧美成人免费 |