2011-04-25 34 views
2

我已經給出使用運行兩個線程之一的任務延伸,並且一個使用工具可運行,輸出意在similair此 F(0) F(1) F(2 ) ......... S(O) S(1) S(2)實現Runnable和延伸螺紋

到目前爲止即時得到 F(0) S(1) F(1) F(2) S(2)

public class Fast implements Runnable 
{ 

    /** Creates a new instance of Fast */ 

    public void run() 
    { 
     for(int i = 0; i <= 9; i++) 
     { 
     try 
     { 
      System.out.println("F("+ i + ")"); 
      Thread.sleep(200);  
     } 
     catch(InterruptedException e) 
     { 
     String errMessage = e.getMessage(); 
     System.out.println("Error" + errMessage); 
     } 
     } 
    } 
} 

public class Slow extends Thread 
{ 

    /** Creates a new instance of Slow */ 

    public void run() 
    { 
     for(int i = 0; i <= 6; i++) 
     { 
     try 
     { 
      System.out.println("S("+ i + ")"); 
      Thread.sleep(400); 

     } 
     catch(InterruptedException e) 
     { 
      String errMessage = e.getMessage(); 
      System.out.println("Error" + errMessage); 
     } 
     } 
    }  
} 

隨着主

public class Main 
{ 
    public static void main(String args[]) 
    { 

     Fast f = new Fast(); 
     Slow s = new Slow(); 
     Thread ft = new Thread(f); 

     ft.start(); 
     s.start(); 

    } 
} 

回答

1

好像你想慢到快後運行?你的輸出是我所期望的。最終F會更快完成(只有2000毫秒),S仍然會運行(2800毫秒)。我不是執行Runnable或擴展Thread的工作,因爲他們給了你相同的最終結果。

如果你想F到年代以前徹底完成你需要加入F上第一,像這樣:

Fast f = new Fast(); 
Slow s = new Slow(); 
Thread ft = new Thread(f); 

ft.start(); 
ft.join(); 
s.start(); 

這將等待英尺甚至啓S給你所需要的輸出F1,F2之前完成,... S1,S2,...

+0

謝謝,是不是可以使用synchronized關鍵字,我有這個工作,然後我的筆記本電腦停止工作,我試圖記住我做了什麼,英尺。 join()不會響鈴 – user445714 2011-04-25 15:25:34

+0

如果您想在兩個線程之間同步,您需要創建一個它們都有權訪問的互斥對象。線程F會通知()該互斥體,線程S會等待它。但是,我仍然不確定你想要達到的目標。如果你想連續運行這些線程,那麼你需要一個連接。如果你只想讓F更快,S更慢,那麼只需增加S的睡眠時間。這將有助於瞭解任務的目的是什麼。 – alpian 2011-04-25 15:41:33

+0

快速實現Runnable並具有一個運行方法,該方法在新行上連續顯示「F(x)」十次,在執行每個打印語句之前休眠20毫秒。在每種情況下,x將由迭代次數代替,從0開始(即,第一次打印輸出爲'F(0)',下一次爲'F(1)',依此類推,直到'F (9)') ◦ 緩慢延伸線程並且有一個運行方法,它在執行每個打印語句之前先在新行上連續七次顯示'S(x)',睡眠40毫秒。 – user445714 2011-04-25 15:45:17