亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java終止線程的兩種方法

 更新時間:2023年07月25日 15:41:11   作者:小林想被監(jiān)督學(xué)習(xí)  
本文主要介紹了Java終止線程的兩種方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

終止的基本思路

正常情況下不會出現(xiàn)run還沒有執(zhí)行完,線程突然就沒了的情況,所以我們想要終止線程就要讓run盡快執(zhí)行完畢,以下代碼都是通過讓run盡快執(zhí)行完畢這個思路來終止線程的

一.程序員手動設(shè)置標志位

package 停止多線程的方式;
/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: wuyulin
 * Date: 2023-07-24
 * Time: 23:06
 */
//1.程序員手動設(shè)置標志位,通過手動設(shè)置的標志位來讓run盡快結(jié)束
public class Demo1 {
    private static boolean isQuit=false;
    public static void main(String[] args) {
        //boolean isQuit=false;
        Thread thread=new Thread(()->{
            while (!isQuit){
                System.out.println("hello thread");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        });
        thread.start();
        try {
            Thread.sleep(4000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        System.out.println("標注位修改,進程退出");
        isQuit=true;
    }
}

在該方法中需要注意標志位的初始化位置,可以看lambda表達式中調(diào)用局部變量發(fā)生錯誤這篇博客描述了更多細節(jié)

二.使用Thread自帶的標志位

package 停止多線程的方式;
/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: wuyulin
 * Date: 2023-07-25
 * Time: 12:17
 */
//使用Thread自帶的標志位
public class Demo2 {
    public static void main(String[] args) {
        Thread thread=new Thread(()->{
            //調(diào)用currentThread()靜態(tài)方法可以獲得當前線程的對象,也就是定義好了的thread
            // 再用這個對象去調(diào)用isInterrupted()方法獲得Thread自帶的標志位
            while (!Thread.currentThread().isInterrupted()){    //Thread.currentThread().isInterrupted()可以用Thread.interrupted()代替
                                                                // 但是不建議,因為interrupted()方法會在判定標志位的同時清除標志位
                System.out.println("hello thread");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    //throw new RuntimeException(e);
                    break;
                }
            }
        });
        thread.start();
        try {
            Thread.sleep(4000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        thread.interrupt(); //調(diào)用interrupt()方法時要是線程正在sleep當中就會強制使sleep拋出一個異常,立即喚醒,但是sleep喚醒了以后
                            //會自動清除前面設(shè)置的標志位,給程序員留下更多的操作空間(接下來的操作在catch中寫,比如要終止線程,就在catch中寫break)
    }
}

1.要通過Thread.currentThread().isInterrupted()來獲取Thread自帶的標志位,調(diào)用currentThread()靜態(tài)方法可以獲得當前線程的對象,也就是定義好了的thread,再用這個對象去調(diào)用isInterrupted()方法獲得Thread自帶的標志位,這段代碼可以用Thread.interrupted()代替但是不建議,因為interrupted()方法會在判定標志位的同時清除標志位,所以不合理,不推薦使用。

2.當線程中有sleep時就說明線程在一些時刻是處于睡眠狀態(tài)的,就會有一些特殊情況,調(diào)用interrupt()方法時要是線程正在sleep當中就會強制使sleep拋出一個異常,立即喚醒,但是sleep喚醒了以后會自動清除前面設(shè)置的標志位,給程序員留下更多的操作空間(接下來的操作在catch中寫,比如要終止線程,就在catch中寫break)

3.要是線程中沒有sleep時,thread.interrupt()就正常的修改標志位,將while循環(huán)結(jié)束,正常終止線程

到此這篇關(guān)于Java終止線程的兩種方法的文章就介紹到這了,更多相關(guān)Java終止線程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 用java生成html文件實現(xiàn)原理及代碼

    用java生成html文件實現(xiàn)原理及代碼

    用printStream來向html文件里輸出數(shù)據(jù),先創(chuàng)建一個StringBuilder對象,通過append方法來為其添加html語句,具體實現(xiàn)如下,感興趣的朋友可以參考下,希望對大家有所幫助
    2013-08-08
  • JavaWeb response完成重定向?qū)崿F(xiàn)過程詳解

    JavaWeb response完成重定向?qū)崿F(xiàn)過程詳解

    這篇文章主要介紹了JavaWeb response完成重定向?qū)崿F(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • 使用Java橋接模式打破繼承束縛優(yōu)雅實現(xiàn)多維度變化

    使用Java橋接模式打破繼承束縛優(yōu)雅實現(xiàn)多維度變化

    這篇文章主要為大家介紹了使用Java橋接模式打破繼承束縛,優(yōu)雅實現(xiàn)多維度變化,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • java如何刪除以逗號隔開的字符串中某一個值

    java如何刪除以逗號隔開的字符串中某一個值

    這篇文章主要介紹了java如何刪除以逗號隔開的字符串中某一個值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java深入了解數(shù)據(jù)結(jié)構(gòu)之棧與隊列的詳解

    Java深入了解數(shù)據(jù)結(jié)構(gòu)之棧與隊列的詳解

    這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)中的棧與隊列,在Java的時候,對于棧與隊列的應(yīng)用需要熟練的掌握,這樣才能夠確保Java學(xué)習(xí)時候能夠有扎實的基礎(chǔ)能力。本文小編就來詳細說說Java中的棧與隊列,需要的朋友可以參考一下
    2022-01-01
  • java中將list用逗號隔開拼成字符串的4種方法例子

    java中將list用逗號隔開拼成字符串的4種方法例子

    我們經(jīng)常在開發(fā)過程之中會遇到需要把返回的Id list轉(zhuǎn)換為一個使用逗號(,)分隔的字符串,下面這篇文章主要給大家介紹了關(guān)于java中將list用逗號隔開拼成字符串的4種方法例子,需要的朋友可以參考下
    2024-01-01
  • 十道java華為編程大賽題目

    十道java華為編程大賽題目

    這篇文章主要為大家分享了十道java華為編程大賽題目,代碼經(jīng)過調(diào)試,經(jīng)典的java編程題,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Java之源文件的執(zhí)行全過程

    Java之源文件的執(zhí)行全過程

    這篇文章主要介紹了Java之源文件的執(zhí)行全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Java基礎(chǔ)教程之構(gòu)造器與方法重載

    Java基礎(chǔ)教程之構(gòu)造器與方法重載

    這篇文章主要介紹了Java基礎(chǔ)教程之構(gòu)造器與方法重載,構(gòu)造器可以初始化數(shù)據(jù)成員,還可以規(guī)定特定的操作,本文還對方法重載做了介紹,需要的朋友可以參考下
    2014-08-08
  • Java 鏈表的定義與簡單實例

    Java 鏈表的定義與簡單實例

    這篇文章主要介紹了 Java 鏈表的定義與簡單實例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06

最新評論