我尝试使用多个线程生成数据集
我尝试在下面的
中创建一个Runnable和几个Threadspublic 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
我无法找出原因
答案 0 :(得分:2)
您的父线程正在关闭PrintWriter pw
,之后子线程t1
和t2
可以使用它来打印。在启动子线程后,您需要让父线程调用wait()
。
您应该查看How to make a Java thread wait for another thread's output?的答案以获得一些帮助。您可以使用此信息来发现如何从代码角度解决此问题;这很简单。
注意:自从此答案发布以来,您已对问题进行了编辑;以下问题的答案更具相关性:Wait until child threads completed : Java
其他有用的SO问题以及您应阅读的适用答案:
答案 1 :(得分:2)
当你启动一个线程时,它会让线程在自己的线程中启动。所以发生了什么,它启动线程,然后在线程有机会启动之前直接进入下一个调用pw.close()
。