Thread線程類

設置線程名

查看線程名是很簡單的,調用Thread.currentThread().getName()便可。java

public class MyThreadDemo { public static void main(String[] args) { MyThread myThread = new MyThread(); //帶參構造方法給線程起名字  Thread thread1 = new Thread(myThread, "關注公衆號Java3y"); Thread thread2 = new Thread(myThread, "qq羣:742919422"); thread1.start(); thread2.start(); // 打印當前線程的名字 System.out.println(Thread.currentThread().getName()); } }

守護線程

守護線程是爲其餘線程服務的數據庫

  • 垃圾回收線程就是守護線程~

守護線程有一個特色安全

  • 當別的用戶線程執行完了,虛擬機就會退出,守護線程也就會被中止掉了。
  • 也就是說:守護線程做爲一個服務線程,沒有服務對象就沒有必要繼續運行

使用線程的時候要注意的地方spa

  1. 在線程啓動前設置爲守護線程,方法是setDaemon(boolean on)
  2. 使用守護線程不要訪問共享資源(數據庫、文件等),由於它可能會在任什麼時候候就掛掉了。
  3. 守護線程中產生的新線程也是守護線程

優先級線程

線程優先級高僅僅表示線程獲取的CPU時間片的概率高,但這不是一個肯定的因素操作系統

線程的優先級是高度依賴於操做系統的,Windows和Linux就有所區別(Linux下優先級可能就被忽略了)~線程

能夠看到的是,Java提供的優先級默認是5,最低是1,最高是10:設計

線程生命週期

線程有3個基本狀態:執行、就緒、阻塞3d

Thread上不少的方法都是用來切換線程的狀態的,code

sleep方法(thread類中的靜態方法,Thread.sleep()調用後,所在的線程進入等待

調用sleep方法會進入計時等待狀態,等時間到了,進入的是就緒狀態而並不是是運行狀態!(注意sleep方法不會釋放鎖對象

yield方法(thread類中的靜態方法,調用後所在當前線程讓出cpu的控制權

調用yield方法會先讓別的線程執行,可是不確保真正讓出

意思是:我有空,能夠的話,讓大家先執行

join方法(是final方法,線程1對象.final(),則線程1具備優先性,它先執行完,才執行別的線程

調用join方法,會等待該線程執行完畢後才執行別的線程~

interrupt方法

線程中斷在以前的版本有stop方法,可是被設置過期了。如今已經沒有強制線程終止的方法了!

因爲stop方法可讓一個線程A終止掉另外一個線程B

  • 被終止的線程B會當即釋放鎖,這可能會讓對象處於不一致的狀態
  • 線程A也不知道線程B何時可以被終止掉,萬一線程B還處理運行計算階段,線程A調用stop方法將線程B終止,那就很無辜了~

總而言之,Stop方法太暴力了,不安全,因此被設置過期了。

咱們通常使用的是interrupt來請求終止線程~

  • 要注意的是:interrupt不會真正中止一個線程,它僅僅是給這個線程發了一個信號告訴它,它應該要結束了(明白這一點很是重要!)
  • 也就是說:Java設計者其實是想線程本身來終止,經過上面的信號,就能夠判斷處理什麼業務了。
  • 具體到底中斷仍是繼續運行,應該由被通知的線程本身處理
  • Thread t1 = new Thread( new Runnable(){ public void run(){ // 若未發生中斷,就正常執行任務 while(!Thread.currentThread.isInterrupted()){ // 正常任務代碼…… } // 中斷的處理代碼…… doSomething(); } } ).start(); 

    再次說明:調用interrupt()並非要真正終止掉當前線程,僅僅是設置了一箇中斷標誌。這個中斷標誌能夠給咱們用來判斷何時該幹什麼活!何時中斷由咱們本身來決定,這樣就能夠安全地終止線程了!

  • interrupt線程中斷還有另外兩個方法(檢查該線程是否被中斷)[檢查中斷是使用interrupt的用途之一]

    • 靜態方法interrupted()-->會清除中斷標誌位
    • 實例方法isInterrupted()-->不會清除中斷標誌位
    • 【用途二:用在阻塞線程,或者將要進入阻塞的線程,設置中斷狀態(即便用interrupt())時,拋出interruptException,中斷狀態復位,同時該線程會退出阻塞的】
相關文章
相關標籤/搜索