繁体   English   中英

打印前线程完成执行

[英]Thread finishing execution before printing

我执行一些代码时正在写文件(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周期之后。 对可能是什么问题有任何想法吗? 有什么优雅的方法可以解决这个问题吗?

在一个答案中,有人建议将打印线程设置为守护程序线程,但是我不知道如何在该特定线程上执行此操作。

在此线程完成之前,可能是调用线程即将结束。 在这种情况下,请使用守护程序线程。 提供更多详细信息也许我们可以提供帮助。

那是((m_bEnExecution)&&(!m_bFinTestRules)”始终等于true吗?

我建议如下:

try {
  while ( (m_bEnExecution) && (!m_bFinTestRules) ) {

    //Calculate new rule
    CalculateNewRule(writer);
    writer.flush();
  }
}
catch (Exception e) {
  e.printStackTrace();
}
finally {
  writer.close();
}

但是您仍然需要确保不会造成无限循环。

您提供的代码不多,但是无论如何。

你什么意思:

强制线程执行停止

您使用的是BufferedWriter因此除非flushclose Writer等,否则您不确定它是否已将所有内容写入缓冲区。

如果要确定,请选择以下方法之一。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM