从管道读取的无限循环线程进入 timed_waiting
Posted
技术标签:
【中文标题】从管道读取的无限循环线程进入 timed_waiting【英文标题】:Infinite loop thread reading from pipe enters a timed_waiting 【发布时间】:2014-06-19 12:59:25 【问题描述】:我需要一个在后台运行的线程从管道读取,但循环突然停止&当我显示线程状态时,我在 TIMED_WAITING 中找到它如何防止它出现这种行为,在线程内运行的代码下方,谢谢提前。
BufferedReader in = null;
while (started)
String xml = "";
// char [] buf=new char[250];
try
in = new BufferedReader(new FileReader(pipeName));
while (!in.ready())
// in.read(buf,0,buf.length);
xml = in.readLine();
// in.close();
catch (Exception e)
System.out.println("error:" + e.getMessage());
continue;
if (xml != null && !xml.equals(""))
System.out.println("recieved: " + xml);
编辑: 使用@thomas 的链接后,程序在打印时运行良好,但是当我尝试解析 pr 在字符串上执行一些函数时,读取的数据变得不稳定且不完整
【问题讨论】:
摆脱这个:while(!in.ready())
@GregKopff 现在它会在更长的时间后停止
等待通知模式怎么样?所以你的代码中没有无限循环。
@Thomas 我正在尝试构建某种电路模拟器,它的 UI 是用 java 编写的,电路和微控制器模拟器都是用 C 语言构建的,所以当我开始模拟代码时,我需要用于从电路模拟器中连续读取值的 java UI;这就是为什么我需要无限循环,当然它会被停止
@AbdoSalem :嗯,好吧,确实有些不同。我假设 C 代码写入文件,并且您希望在 java 中实时更新文件。也许这是一个类似的问题:***.com/questions/14799945/…
【参考方案1】:
抱歉@thomas 耽搁了, 当我第一次问这个问题时,我有两个 C 程序和一个 java, 第一个 C 程序在管道中写入然后取消链接它,而另一个写入多次如果它取消链接管道 java 中的线程在一段时间后停止,但如果它没有取消链接我们收到的数据并根据打印良好@GregKopff 假设的编辑,但是当我将 xml 解析添加到第二个程序写入的数据中时,数据到达损坏和丢失,我认为 xml 解析需要太多时间,所以我更改了发送的数据格式,只需添加一个分隔符,我知道这不是一个解决方案,但它对我有用,再次抱歉延迟如果你想要一个版本,请询问,我希望它有帮助
【讨论】:
以上是关于从管道读取的无限循环线程进入 timed_waiting的主要内容,如果未能解决你的问题,请参考以下文章