黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 java如何正確停止一個(gè)線程

java如何正確停止一個(gè)線程

更新時(shí)間:2019-10-25 11:38:08 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2498次

 

     如何停止java的線程一直是一個(gè)開發(fā)多線程程序常遇到的一個(gè)問題。也有好多同學(xué)問過,所以今天動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)小編在這里總結(jié)一下希望可以讓更多的人知道在java中如何安全的結(jié)束一個(gè)正在運(yùn)行的線程。


  在Java的多線程編程中,java.lang.Thread類型包含了一些列的方法start(), stop(), stop(Throwable) and suspend(), destroy() and resume()。通過這些方法,我們可以對(duì)線程進(jìn)行方便的操作,但是這些方法中,只有start()方法得到了保留。


  那么,我們究竟應(yīng)該如何停止線程呢?這里我們介紹兩種方法:


  1、使用共享變量的方式


  在這種方式中,之所以引入共享變量,是因?yàn)樵撟兞靠梢员欢鄠€(gè)執(zhí)行相同任務(wù)的線程用來作為是否中斷的信號(hào),通知中斷線程的執(zhí)行。


public class ThreadFlag extends Thread 

    public volatile boolean exit = false; 

 

    public void run() 

    { 

        while (!exit); 

    } 

    public static void main(String[] args) throws Exception 

    { 

        ThreadFlag thread = new ThreadFlag(); 

        thread.start(); 

        sleep(3000); // 主線程延遲3秒 

        thread.exit = true;  // 終止線程thread 

        thread.join(); 

        System.out.println("線程退出!"); 

    } 


  在上面代碼中定義了一個(gè)退出標(biāo)志exit,當(dāng)exit為true時(shí),while循環(huán)退出,exit的默認(rèn)值為false。在定義exit時(shí),使用了一個(gè)Java關(guān)鍵字volatile,這個(gè)關(guān)鍵字的目的是使exit同步,也就是說在同一時(shí)刻只能由一個(gè)線程來修改exit的值。


  建議使用如下的方法來停止線程:


 private volatile Thread blinker; 

    public void stop() { 

        blinker = null; 

    } 

    public void run() { 

        Thread thisThread = Thread.currentThread(); 

        while (blinker == thisThread) { 

            try { 

                thisThread.sleep(interval); 

            } catch (InterruptedException e){ 

            } 

            repaint(); 

        } 

    }

 


  2、使用interrupt方法終止線程


  如果一個(gè)線程由于等待某些事件的發(fā)生而被阻塞,又該怎樣停止該線程呢?


  這種情況經(jīng)常會(huì)發(fā)生,比如當(dāng)一個(gè)線程由于需要等候鍵盤輸入而被阻塞,或者調(diào)用Thread.join()方法,或者Thread.sleep()方法,在網(wǎng)絡(luò)中調(diào)用ServerSocket.accept()方法,或者調(diào)用了DatagramSocket.receive()方法時(shí),都有可能導(dǎo)致線程阻塞,使線程處于處于不可運(yùn)行狀態(tài)時(shí),即使主程序中將該線程的共享變量設(shè)置為true,但該線程此時(shí)根本無法檢查循環(huán)標(biāo)志,當(dāng)然也就無法立即中斷。


  這里我們給出的建議是,不要使用stop()方法,而是使用Thread提供的interrupt()方法,因?yàn)樵摲椒m然不會(huì)中斷一個(gè)正在運(yùn)行的線程,但是它可以使一個(gè)被阻塞的線程拋出一個(gè)中斷異常,從而使線程提前結(jié)束阻塞狀態(tài),退出堵塞代碼。


class MyThread extends Thread {

volatile boolean stop = false;

 

public void run() {

    while (!stop) {

        System.out.println(getName() + " is running");

    try {

        sleep(1000);

    }catch (InterruptedException e) {

        System.out.println("week up from blcok...");

              stop = true; // 在異常處理代碼中修改共享變量的狀態(tài)

        }

    }

    System.out.println(getName() + " is exiting...");

    }

}

 

class InterruptThreadDemo3 {

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

      MyThread m1 = new MyThread();

          System.out.println("Starting thread...");

                m1.start();

                Thread.sleep(3000);

          System.out.println("Interrupt thread...: " + m1.getName());

                m1.stop = true; // 設(shè)置共享變量為true

                m1.interrupt(); // 阻塞時(shí)退出阻塞狀態(tài)

                 Thread.sleep(3000); // 主線程休眠3秒以便觀察線程m1的中斷情況

          System.out.println("Stopping application...");

          }

}


  注意:在Thread類中有兩個(gè)方法可以判斷線程是否通過interrupt方法被終止。一個(gè)是靜態(tài)的方法interrupted(),一個(gè)是非靜態(tài)的方法isInterrupted(),這兩個(gè)方法的區(qū)別是interrupted用來判斷當(dāng)前線是否被中斷,而isInterrupted可以用來判斷其他線程是否被中斷。


timg (10).jpg


以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)小編介紹的“java如何正確停止一個(gè)線程”的內(nèi)容,希望都大家有幫助,更多java最新資訊請(qǐng)繼續(xù)關(guān)注動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)官網(wǎng),每天會(huì)有精彩內(nèi)容分享與你。


相關(guān)視頻教程免費(fèi)下載


java線程視頻教程:線程基本操作介紹


java多線程視頻教程:守護(hù)線程詳解



相關(guān)文章推薦


Java多線程你了解多少?


2019最新50道精選Java線程面試題


Java多線程基礎(chǔ)開發(fā)詳細(xì)教程


最常見的Java線程面試題總結(jié)


JAVA多線程實(shí)現(xiàn)的四種方式


Java多線程學(xué)習(xí),深入解析


常見Java多線程面試題總結(jié)


提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 成人免费观看视频高清视频 | 18成禁人视频免费网站 | 一级特级aaaa毛片免费观看 | 成年人免费在线观看网站 | 一级性毛片 | 午夜色图 | 欧美青青草| 黄色大片一级 | 国产成人毛片毛片久久网 | 免费黄色影院 | 久久精品无码一区二区日韩av | 中文字幕第9页 | 精品视频一区二区三区在线观看 | 亚洲欧美一区二区三区综合 | 午夜亚洲一区 | 亚洲码在线 | 亚洲 欧美 日韩 在线 香蕉 | 一级免费黄色大片 | 成人免费在线观看视频 | 一级片免费在线 | 可以免费看的黄色网址 | 成年黄网站在线观看免费 | 国产碰碰 | 一本大道香蕉中文在线高清 | 看黄网址在线观看 | 120秒免费看| 欧美日韩精选 | 天天摸天天做天天爽水多 | 亚洲天天在线 | 午夜免费观看_视频在线观看 | 精品欧美一区二区精品久久 | 91日韩欧美| 欧美激情精品久久久久 | 免费一级a毛片在线播出 | 国产免费一区二区三区 | 国产小视频免费观看 | 免费观看成人www精品视频在线 | 羞羞人成午夜爽爽影院 | 牛牛精品 | 天天搞天天操 | 久久成人国产精品免费 |