java終止線程的通用機制

來源:互聯網
上載者:User

      

 線程的終止其實很簡單,只要在實現Runnable的類中添加cancel()方法和cancel標記。如:       private static volatile boolean canceled = false;       public static void cancel(){ canceled = true;}       注意,這裡是volatile標記的static布爾值,因為這是接下來的方法中都會用到的,而且其值的變化會對它們產生影響,所以是static。volatile就像之前說過的,標記這個布爾值為共用的,使得接下來的與其有直接或者間接的synchronized方法都能看到它的變化,然後就是設定一個方法cancel(),基本上這個方法都是使canceled的值為true,如:       public static void cancel(){ canceled = true;}       然後在run()方法中都會針對canceled的值的情況作出相應的處理,一般都會有提示該線程停止的輸出提示。       其實上面的,都只是該停止線程的提示而已,並沒有真正意義上的終止線程的作用,只不過當我們調用cancel()方法是為了告訴使用者,我這裡就要終止線程了,並且要終止那個線程,能夠終止線程的,還是Executor類的shutdown()這個方法。       這裡有個疑問,就是有shutdown()和shutdownNow(),它們有什麼區別呢?照我的理解,就是線程的關閉並不是馬上的,而調用shutdownNow()可以馬上關閉,那麼到底該選哪個呢?我覺得,這隻是效能上的小小最佳化而已,不必過於在意,而且有時候馬上關閉線程還會影響其他線程。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.