2013-02-04 67 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();