1. 程式人生 > >Java中的join方法個人理解

Java中的join方法個人理解

因為今天看到一道筆試題目,就是怎麼確保多執行緒不發生死鎖問題,個人認為要確保多執行緒不發生死鎖的辦法就是讓執行緒有序的操作資源,當然我也不知道對不對,如果網友發現有錯,歡迎指出把。我當時想到的就是使用join方法使用,然後就發現自己以前就是知道join方法可以使主執行緒停止知道子執行緒執行完畢。具體怎麼實現怎麼操作還是不清楚,於是自己寫了一段簡單的程式碼測試了一下,理解了一下,希望對大家有幫助,當然還是那句畢竟是初學者,可能有錯誤的理解希望大家指出,廢話不多說附上程式碼
public class Test1 {

	public static void main(String[] args) throws InterruptedException {
		// TODO Auto-generated method stub
		
		//這裡是實現Runnable介面建立一個執行緒的方法,即有該類的物件建立一個Thread類的物件
		ThreadTest tt=new ThreadTest();
		Thread t=new Thread(tt);
		
		//這裡是繼承Thread類的方法建立一個執行緒,就是簡單的建立一個物件
		ThreadTest1 t1=new ThreadTest1();
		ThreadTest2 t2=new ThreadTest2();
		
			
		t.start();
		//此時t執行緒呼叫join方法,則使得其他執行緒停止,先執行完t執行緒再去執行其他執行緒t1和t2執行緒
		//t.join();
		
		//此時t1執行緒呼叫join方法,則使得其他執行緒停止,先執行完t1執行緒再去執行其他執行緒t和t2執行緒
		t1.start();
		t1.join();
		
		//此時t2執行緒呼叫join方法,則使得其他執行緒停止,先執行完t2執行緒再去執行其他執行緒t和t1執行緒,這裡注意前面會執行前面t和t1的部分程式碼,因為當程式讀到join方法前已經執行了一段時間,之前的執行順序完全由系統自己決定
		t2.start();
		//t2.join();
	
		
		//這裡總結一下,就是一旦某執行緒使用join()方法,會使程式停止其他執行緒而執行呼叫join方法的執行緒,可以理解join就是個插隊的執行緒
		
		
		
		//這裡純屬就是實現下類的內部方法怎麼呼叫類的內部私有屬性,一時忘了就順便實現下
		tt.f(new ThreadTest());
		
		
		
	}

}

//第一個執行緒,實現了Runnable介面,重寫run方法
class ThreadTest implements Runnable{
	private int a=0;
	private int b=5;
	public void run()
	{
		for(int i=0;i<100;i++)
		{
			a=a+i;
			System.out.println(a);
		}
		
	}
	public void f(ThreadTest tt)
	{
		System.out.println(tt.b);
	}
	
}

//第二個執行緒,繼承Thread類,然後重寫run方法
class ThreadTest1 extends Thread{
	private int f=11;
	public void run()
	{
		for(int i=0;i<5;i++)
		{
			System.out.println(f);
		}
	}
}

//第三個執行緒,同樣是實現了Thread類,然後重寫run方法
class ThreadTest2 extends Thread{
	private int c=99;
	public void run()
	{
		for(int i=0;i<10;i++){
			System.out.println(c);
		}
	}
}