我在执行一些代码时正在写入文件(Java)。您可以在下面找到所使用的代码,该代码由 JVM 调用的“线程 B”执行。
writer = new PrintWriter(new BufferedWriter(new FileWriter("table.csv")));
(...)
while ( (m_bEnExecution) && (!m_bFinTestRules) ) {
//Calculate new rule
CalculateNewRule(writer);
}
writer.close();
在CalculateNewRule 方法中,创建了一个AssociationRule 的新实例,它将接收writer 作为实例变量。 AssociationRule 内的函数之一执行打印。
writer.println(outputRule);
writer.flush();
问题似乎是这个函数是由 AWT 线程调用的,并且在CalculateNewRule(writer)方法内要写入文件的最后一行永远不会被写入,除非我显式强制执行线程在 while 循环之后停止。知道可能是什么问题吗?有没有优雅的方法来处理这个问题?
在一个答案中,建议我将打印线程设置为守护线程,但我不知道如何在该特定线程上执行此操作。
最佳答案
可能是调用线程在该线程完成之前就已经结束了。如果是这种情况,请使用守护线程。 提供更多详细信息也许我们可以提供帮助。
关于java - 线程在打印之前完成执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28210238/