【发布时间】:2017-06-20 19:44:08
【问题描述】:
我有几个线程。每个线程内部都有一个 while(true) 循环,我在其中添加逐周期文本。我没有找到用标志更改 while(true) 循环的好方法,这样当我退出循环时我可以关闭文件。例如,当我键入内容或按下 Eclipse 红色按钮时,我想这样做。
这是构造函数(节点是线程)
public Node(Channel c, int address) {
my_address=address;
try {
writer = new CSVWriter(new FileWriter(my_address + "_id.csv"), ',', ' ' , ' ' ,"\n");
writer2 = new CSVWriter(new FileWriter(my_address + "_label.csv"), ',', ' ' , ' ' ,"\n");
String[] entries = "num#state#duration#event#condition#condition result#action1#action2#backoff value".split("#");
writer.writeNext(entries);
writer2.writeNext(entries);
} catch (IOException e) {
e.printStackTrace();
}
}
这是我修改文件的循环:
while (true) {
//write id value
String id_to_split = num+"#"+fsm.current_state.nome+"#"+tempo_minore+"#"+
fsm.current_transition.e.getId()+"#"+ fsm.current_transition.c.getId()+"#"+
fsm.current_transition.c.getFlag()+"#"+fsm.current_transition.a.getId()+"#"+
fsm.current_transition.a2.getId()+"#"+backoff;
String[] id_entries = id_to_split.split("#");
writer.writeNext(id_entries);
//write name
String label_to_split = num+"#"+fsm.current_state.nome+"#"+tempo_minore+"#"+
fsm.current_transition.e.getLabel()+"#"+fsm.current_transition.c.getLabel()+"#"+
fsm.current_transition.c.getFlag()+"#"+fsm.current_transition.a.getLabel()+"#"+
fsm.current_transition.a2.getLabel()+"#"+backoff;
String[] label_entries = label_to_split.split("#");
writer2.writeNext(label_entries);
num++;
}
closeCSVs();
}
方法closeCSVs():
public void closeCSVs() {
try {
writer.close();
writer2.close();
} catch (IOException e) {
e.printStackTrace();
}
}
【问题讨论】:
-
请贴一些代码示例。
-
如何在循环后关闭文件并在满足特定条件时中断循环?要检查什么条件以及如何检查取决于您。如果可能的话,我也不会在构造函数(线程的?)中打开文件流,而是在进入循环之前打开文件流。
-
要修复代码以执行您想要的操作,您很可能需要进行更改。
-
或者当我按下 Eclipse 红色按钮时 这只是简单地终止了进程,因此没有明确的解决方案。
标签: java multithreading while-loop