Java停止線程的方法 interrupt方法解析

來源:互聯網
上載者:User

解析下interrupt()方法,對於老鳥來說,新手遇到這樣的問題簡直笑而不語,

估計你們上學的時候老師也說的不好,根本沒有具體的解析,我那個java老師就是這樣的,汗!------

具體解析請看代碼注釋。。。。。。。

/** * 停止線程的方法 * @author aa * */public class ThreadInterrupt {        private volatile static boolean stop = false;    /**     * @param args     * @throws InterruptedException      */    public static void main(String[] args) throws InterruptedException {        // 線程啟動        Thread01 ti1 = new Thread01() ;        ti1.start() ;                // Main線程睡1秒        Thread.sleep(1000) ;                /**         * 程式運行到這裡,ti線程已經啟動,而且ti線程正在阻塞狀態,         * 屏蔽掉stop方法,         * 調用interrupt()方法讓線程退出阻塞狀態,調用該方法線程將會拋出一個中斷異常,         * InterruptedException,終結阻塞狀態之後,接著線程繼續運行         * 如下你將會看到“線程阻塞終結之後輸出”列印到控制台上         *          * 總結:interrupt()是用來退出線程的阻塞狀態,如果線程不是阻塞狀態,         * 調用該方法將不起任何作用,中文jdk說的是“中斷線程”,從字面上理解會給人誤導。(很懷疑是機器翻譯)         * wait(),join(),sleep()都會讓線程阻塞         */        ti1.interrupt() ;                System.out.println() ;                // 線程啟動        /**         * 正確停止線程的方法是設定共用變數,無論什麼情況,線程的退出都是檢查共用變數然後停止         *          * 不考慮意外情況,         * 這裡ti2線程start()後,         * Mian線程休眠2.5秒過後並設定stop為true,         * 此時ti2線程也就剛好是阻塞狀態,         * 設定stop之後繼續執行interrupt()方法,終止阻塞,         * 線程繼續運行,遇到stop==true,跳出while,線程停止         */        Thread02 ti2 = new Thread02() ;        ti2.start() ;        Thread.sleep(2500) ;        stop = true ;        ti2.interrupt() ;                Thread.sleep(1000) ;    }        private static class Thread01 extends Thread {        @Override        public void run() {            System.out.println("Thread01線程啟動") ;            try {                sleep(1000000) ; // 等待1000秒            } catch (InterruptedException e) {                System.out.println("Thread01線程阻塞停止") ;            }            System.out.println("Thread01線程阻塞終結之後輸出") ;        }    }        private static class Thread02 extends Thread {        @Override        public void run() {            System.out.println("Thread02線程啟動") ;            int i = 0 ;            while(!stop) {                System.out.println(i++) ;                try {                    Thread.sleep(1000) ;                } catch (InterruptedException e) {                    System.out.println("Thread02線程阻塞停止") ;                }            }        }    }}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.