2013-02-04 102 views
1

我想這個計劃在Java,但我沒有得到任何輸出,當我把在run()方法都的Java:多線程不工作

Main.java:

public class Main { 

    static int line; 
    static boolean ret = true; 
    static BufferedReader br; 

    /** 
    * @param args 
    * @throws IOException 
    */ 
    public static void main(String[] args) throws IOException { 

      File f = new File("tere.dat"); 
      // boolean ret = f.createNewFile() ; 
      br = new BufferedReader(new FileReader(f)); 

      new Test(br.readLine()); 
      new Test(br.readLine()); 
    } 

}  

Test.java:

public class Test extends Thread { 

    private String input; 
    static int thread_count = 0; 

    public Test(String l) 
    { 
     input = l; 
    } 

    public void run() 
    { 
     System.out.println("Checking from other class : This was printed from file :>>"); 
     System.out.println(input); 
     String upper = input.toUpperCase(); 
     System.out.println(""); 
     System.out.println("The String in all UpperCase :" + upper); 
    } 
} 

我想要做的是,我想讀的使用兩個線程文件行,然後顯示不管我得到的。我是新來的Java

編輯

我沒有使用start()方法。即使使用後start()它只從文件中讀取兩行並停止。可能是什麼問題 ?

回答

4

你必須start()你的主題。

此外,我建議在繼續之前閱讀Java中的線程和併發的很好的教程,因爲它是一個複雜的主題。

+0

謝謝。這樣一個愚蠢的錯誤:P –

1

你需要開始你的線程start()我建議你不要擴展線程,而是實現Runnable。

順便說一句:除非你輸入不可能快,你不會看到使用線程的區別。這將需要大約0.1毫秒的時間來啓動線程並完成它,除非您輸入的速度比這更快,否則沒有任何區別。

+0

我知道。但我只是想了解線程模型:)謝謝你的回覆:) –

+2

@DeepankarBajpeyi我建議你在開始線程之前輸入兩行,或者只是使用硬編碼的字符串,如「你好」和「世界」。 –

1

您需要啓動線程:

(new Test(br.readLine())).start(); 

而且也,你必須添加一些join等待線程完成,因爲你的主線程將完成執行之前創建的線程。

+0

聯合真的有必要嗎?主線程在兩個線程創建完成後完成,所以它不需要等待他們做任何事情。 –

+0

它可能在線程之前完成,這是我認爲partlov正在建議 –

1

你必須要對他們說:

 (new Test(br.readLine())).start(); 
     (new Test(br.readLine())).start();