Thread類中的join方法的主要做用就是同步,它能夠使得線程之間的並行執行變爲串行執行。java
public class JoinTest { public static void main(String [] args) throws InterruptedException { ThreadJoinTest t1 = new ThreadJoinTest("小明"); ThreadJoinTest t2 = new ThreadJoinTest("小東"); t1.start(); /**join的意思是使得放棄當前線程的執行,並返回對應的線程,例以下面代碼的意思就是: 程序在main線程中調用t1線程的join方法,則main線程放棄cpu控制權,並返回t1線程繼續執行直到線程t1執行完畢 因此結果是t1線程執行完後,纔到主線程執行,至關於在main線程中同步t1線程,t1執行完了,main線程纔有執行的機會 */ t1.join(); t2.start(); } } class ThreadJoinTest extends Thread{ public ThreadJoinTest(String name){ super(name); } @Override public void run(){ for(int i=0;i<1000;i++){ System.out.println(this.getName() + ":" + i); } } }
public class JoinTest { public static void main(String [] args) throws InterruptedException { ThreadJoinTest t1 = new ThreadJoinTest("小明"); ThreadJoinTest t2 = new ThreadJoinTest("小東"); t1.start(); /**join方法能夠傳遞參數,join(10)表示main線程會等待t1線程10毫秒,10毫秒過去後, * main線程和t1線程之間執行順序由串行執行變爲普通的並行執行 */ t1.join(10); t2.start(); } } class ThreadJoinTest extends Thread{ public ThreadJoinTest(String name){ super(name); } @Override public void run(){ for(int i=0;i<1000;i++){ System.out.println(this.getName() + ":" + i); } } }
public static void main(String [] args) throws InterruptedException { ThreadJoinTest t1 = new ThreadJoinTest("小明"); ThreadJoinTest t2 = new ThreadJoinTest("小東"); /**join方法能夠在start方法前調用時,並不能起到同步的做用 */ t1.join(); t1.start(); //Thread.yield(); t2.start(); }
join方法實現原理ide