2010-08-17 83 views
0

Join方法如何在線程中工作。如果在run方法中寫入連接方法,那麼它將會死鎖。只需要瞭解爲什麼發生這種情況。Java線程加入方法

一小段代碼片段:

public class ThreadSchuduling extends Thread{ 
    static ThreadSchuduling threadObj3; 
    public ThreadSchuduling(){ 
     System.out.println("Default Constructor"); 
    } 
    public ThreadSchuduling(String name){ 
     System.out.println("Parameter Constructor"); 
    } 
    public void run(){ 
     try{ 
      threadObj3.join(); 
     }catch(Exception e){ 
      System.out.println("Error in RUN "+e); 
     } 
     System.out.println(Thread.currentThread().getName()); 
     for(int i = 0; i < 10; i++){ 
      System.out.println("Value is = "+i); 
     } 

    } 
    public static void main(String[] args) { 
     ThreadSchuduling threadObj1 = new ThreadSchuduling("Thread1"); 
     ThreadSchuduling threadObj2 = new ThreadSchuduling("Thread2"); 
     threadObj3 = new ThreadSchuduling("Thread3"); 
     ThreadSchuduling threadObj4 = new ThreadSchuduling("Thread4"); 

      threadObj1.start(); 
      threadObj2.start(); 
      threadObj3.start(); 
      System.out.println("Thread 3 is started"); 
      threadObj4.start(); 
      try{ 
      threadObj3.join(); 

     }catch(Exception e){ 
      System.out.println("Errpr "+e); 
     } 
     System.out.println("Main Method completed"); 
    } 

} 

我只是想完成線程1前thread3及線程

+0

首先你有什麼想法如何加入方法工作? – JegsVala 2014-06-04 05:36:58

回答

1

你還沒有解釋什麼threadObj3是...是同一線程參考?如果是這樣,它將會陷入僵局是可以理解的 - 它會一直等到它完成,但它不會執行,因爲它在等待!

你究竟在努力實現什麼?

0

OMG,threadObj3總是自己等待,如果你想在thread1和thread2之前完成thread3,你可以設置優先級,否則很難確保thread3在其他線程之前執行。

+0

優先級更多的是建議而不是保證。 – Pops 2010-08-17 21:14:49