javathread源碼
① 詳解java Thread中的join方法
在Java編程中,Thread類的join()方法發揮著關鍵作用。當需要控制線程執行順序時,它能讓調用線程暫停,直至被調用的線程完成。在主線程(如main())中,join()尤其有用,它會阻止主線程直到目標線程結束,例如:
當調用t1.join()時,main()線程會被暫停,直到t1線程完全執行完畢,然後main()線程才會繼續執行。
join()方法的工作原理主要依賴於Java內存模型中的同步機制。通過查看Thread類的源碼,我們發現join()實際上調用了wait()方法,使調用線程進入等待狀態,直到目標線程結束。由於wait()方法前有synchronized修飾,這意味著主線程(t1線程的持有者)會在一個鎖定的上下文中等待,如下所示:
代碼等效於:synchronized(this) { wait(); },使得主線程進入等待隊列,直到t1線程結束。
然而,wait()方法本身並不會喚醒主線程,喚醒過程隱藏在Java虛擬機(JVM)的底層。當t1線程執行完畢,JVM會自動調用lock.notify_all()方法,將主線程從等待隊列中喚醒。
總結起來,join()方法的使用需要注意以下兩點:
1. 它讓調用線程暫停,直到目標線程結束。
2. 喚醒機制由JVM內部的notify_all()方法控制,確保線程按照預期順序執行。
理解這些原理,能幫助你更有效地管理和控制Java線程。
② java編寫一個用於繼承Thread並創建兩個線程,每個線程輸出從1到5的數
--------------------------napolun180410-----------------------------
public class MyThread extends Thread{
public void run(){
try{
for(int i=1;i<6;i++){
System.out.println(i);
sleep(2000);
}
}
catch(InterruptedException e){}
}
public static void main(String args[]){
System.out.println("當前的線程數:"+Thread.activeCount());
MyThread thread1=new MyThread();
thread1.start();
System.out.println("當前的線程數:"+Thread.activeCount());
MyThread thread2=new MyThread();
thread2.start();
System.out.println("當前的線程數:"+Thread.activeCount());
}
}
文件名 MyThread.java (注意大小寫,別改文件名)
--------------------------有問題發消息我----------------------------