Java多線程系列詳解_02_Thread API

Thread類的構造方法

// NoArgsConstructor
Thread()
//傳入Runnable實例
Thread(Runnable target)
//傳入Runnable實例和線程名稱
Thread(Runnable target, String name)
//傳入線程名稱
Thread(String name)
//傳入線程組名稱和Runnable實例
Thread(ThreadGroup group, Runnable target)
//傳入線程組名稱和Runnable實例和線程名稱
Thread(ThreadGroup group, Runnable target, String name)
//傳入線程組名稱和Runnable實例和線程名稱和指定的堆棧大小
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
//傳入線程組名稱和線程名稱
Thread(ThreadGroup group, String name)

接下來依次分析構造方法,瀏覽源碼尋找關鍵信息
在這裏插入圖片描述
圖2-1在這裏插入圖片描述
圖2-2
在這裏插入圖片描述
圖2-3
在這裏插入圖片描述
圖2-4

在這裏插入圖片描述
圖2-5

  1. init()方法會調用重載方法( 圖2-2)
  2. 如果不傳入線程組會默認使用parent的線程組( 圖2-3)
  3. 如果不傳入線程名稱會默認使用"Thread-" + nextThreadNum()( 圖2-1和2-4)
  4. 如果不傳入Runnable實例會默認不執行方法(圖2-5)
  5. 如果不傳入stackSize,默認大小是0(圖2-1)

Thread類的常用方法

// 創建線程供後面Api使用
Thread thread = new Thread(()->readFromDataBase());
// 使當前線程休眠
Thread.sleep(long millis) throw InterruptedException
// 守護線程:個人理解,例如當建立一個長連接進行心跳檢測時,可以將測試心跳的程序置位守護線程,
// 因爲在主程序結束之之後,判斷心跳不是必要的,也就是當主線程結束之後,守護線程會跟着結束
thread.setDaemon(Boolean b)
// 判斷是否爲守護線程
thread.isDaemon()
// 設置線程的優先級(Max = 10 , Min = 1)
// 注意設置優先級只是建議程序去優先或延後執行,程序並不一定會根據優先級去執行
thread.setPriority(int i);
// join等待結束方法,意思就是等待線程結束
thread.join()
// interrupt打斷方法,必須在捕獲到InterruptedException異常是纔會打斷程序
thread.interrupt()
//stop 停止方法 這個方法是過時的,JDK官方建議不使用,如果需要停止線程,需要使用interrupt()方法
thread.stop()

多線程常見面試題

  1. voliate關鍵字:使用這個關鍵字修飾之後 , 多個線程運行期間會相互可見
  2. 鎖:synchronized可以加再方法上, 也可以作爲代碼塊使用,加在方法上的時候會存在this鎖,
    其實使用synchronized修飾方法和 synchronized(this){} 代碼塊的作用是一樣的,
    這個鎖的作用是使程序單通道執行!
  3. sleep() 和wait()區別
    1- 它們最大本質的區別是:sleep()不釋放同步鎖,wait()釋放同步鎖.
    2- sleep()是Thread類的方法,而wait()則是Object的方法.
    3- sleep(milliseconds)可以用時間指定來使他自動醒過來,如果想要喚起只能使用interrupt()打斷
    而wait()想要被喚起,可以使用notify()或者notifyAll()方法喚醒
    4- sleep()必須捕獲異常,而wait(),notify()和notifyAll()不需要捕獲異常
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章