如何使用多线程生成数据?

时间:2014-03-08 03:55:00

标签: java multithreading runnable

我尝试使用多个线程生成数据集

我尝试在下面的

中创建一个Runnable和几个Threads
public class DataGenerator {

      static int currentRow = 0 ;
      static PrintWriter pw ;

    public static void main(String[] args) throws FileNotFoundException {
        File file = new File("Test3.csv") ; 
        pw = new PrintWriter(file);
        pw.println("var1,var2,var3") ;    
        Thread t1 = new Thread(new MyRunnable()) ;
    Thread t2 = new Thread(new MyRunnable()) ;
    t1.start(); 
    t2.start();
    t1.join();
    t2.join();

        pw.close();
        System.exit(0) ;
    }


}

class MyRunnable implements Runnable  {
    public void run () {
        for ( int i = DataGenerator.currentRow; i < 50000000; DataGenerator.currentRow ++ ) {
            DataGenerator.pw.println(i + ",19:05.1,some text");
            System.out.println(i);
            }
    }
}

然而是循环o

我无法找出原因

2 个答案:

答案 0 :(得分:2)

您的父线程正在关闭PrintWriter pw,之后子线程t1t2可以使用它来打印。在启动子线程后,您需要让父线程调用wait()

您应该查看How to make a Java thread wait for another thread's output?的答案以获得一些帮助。您可以使用此信息来发现如何从代码角度解决此问题;这很简单。

注意:自从此答案发布以来,您已对问题进行了编辑;以下问题的答案更具相关性:Wait until child threads completed : Java

其他有用的SO问题以及您应阅读的适用答案:

另见Java Concurrency Tutorial

答案 1 :(得分:2)

当你启动一个线程时,它会让线程在自己的线程中启动。所以发生了什么,它启动线程,然后在线程有机会启动之前直接进入下一个调用pw.close()