2012-04-17 60 views
0

我已經開發了java線程上的下面的程序,我有兩個線程正在執行並訪問run()中的方法,現在如果我想先開始第一個線程然後開始第二個線程通過同步機制,但如果我想第一個線程結束,然後再開始)第二個線程,可能是實現通過連接(請告訴我如何能夠通過實現加入來完成,關於線程的加入

public class MyThread2 extends Thread { 


public void run() 
{ 

    //synchronized (this) 
    //{ 
    //System.out.println(Thread.class); 
    for(int i=0;i<20;i++) 
    { 
     try{ 

      Thread.sleep(500); 
      System.out.println(Thread.currentThread().getName()); 
     System.out.println(i +"\n"+ ".."); 
     }catch(Exception e) 
     {e.printStackTrace(); 
     } 
    } 
    //} 

}

public static void main(String... a) 
{ 
    MyThread2 obj = new MyThread2(); 

    Thread x = new Thread(obj); 
    x.setName("first"); 
    x.start(); 

    Thread y = new Thread(obj); 
    y.setName("second"); 
    y.start(); 




} 
+0

如果你想在開始第二個線程之前結束第一個線程,爲什麼你要使用線程呢?這只是一種接一種地調用兩種方法的複雜方式。 – EJP 2012-04-17 05:58:11

回答

1
x.start(); 
x.join(); 
y.start(); 

但你應該認識到,這是完全沒有意義的,根據我上面的評論。如果你想要的順序執行所有你需要的是:

x.run(); 
y.run(); 

,你不需要任何人來擴展Thread

+0

嗨EJP,非常感謝,它的工作,現在我的第一個線程開始,然後完成第二個線程開始,請再次解釋一點,由x.start()發生了什麼; x.join(); y.start(); 我所掌握的是第一個x線程開始並在它完成之後y線程開始,請expalin一點點 – dghtr 2012-04-17 06:08:16

+0

'start()'啓動線程。按照Javadoc,join()將它加入當前線程:當前線程一直等到目標線程完成。 – EJP 2012-04-17 06:29:25

0

如果您希望作業按順序運行,則無需擴展線程。但是如果你想控制線程執行的順序,那麼你可以嘗試爲線程設置優先級。

//Setting priorities on the Thread objects 
    x.setPriority(Thread.MAX_PRIORITY); 
    y.setPriority(Thread.MIN_PRIORITY); 

如果我們設置線程的優先級,我們仍然沒有得到執行的精確控制,但至少我們可以告訴我們一個我們認爲是 最重要的

希望這有CPU幫助你。

+0

嗨,這是不能保證它是在做什麼,它是先運行,然後立即運行第二個和週期是這樣的,我正在尋找第一個線程將完成它的任務,然後第二個線程應該開始作爲一個新的..! !反正謝謝你的幫助..! – dghtr 2012-04-17 06:19:47