【发布时间】:2013-10-10 04:41:52
【问题描述】:
我制作了一个程序,它使用单线程将文件中的数据读取到链表中,我们称之为 LL1。由此我创建了一个线程池,它为每个线程分配一个处理任务,该任务从 LL1 读取数据并将其计算输出到一个新的链表。 由此我需要将每个线程的新链表输出到一个文件中。我试图在顺序块中输出每个链表,这样线程就不会混合数据,所以我使用了如下同步点:
public synchronized void appendContents(List<Vector2> output1) {
try {
sFileName = outFilePath + "\\file" +fileCount+ ".cntr";
File oFile = new File(sFileName);
if (!oFile.exists()) {
oFile.createNewFile();
}
if (oFile.canWrite()) {
//BufferedWriter oWriter = new BufferedWriter(new FileWriter(sFileName, true));
FileWriter wstream = new FileWriter(oFile, true);
BufferedWriter outWriter = new BufferedWriter(wstream);
for(int i = 0; i < output1.size(); i++)
{
//replace the space marker values with a newline
if(output1.get(i).y == -200.0){
outWriter.newLine();
}else{
outWriter.write(String.valueOf(output1.get(i).x) + " " + String.valueOf(output1.get(i).y) + " " + String.valueOf(interval));
outWriter.newLine();
}
}
outWriter.close();
}
}
catch (IOException oException) {
throw new IllegalArgumentException("Error appending/File cannot be written: \n" + sFileName);
}
我面临的问题是数据没有按我需要的顺序输出,即
list1 value list1 value
list1 value _______________\ list2 value
list1 value ________________\ list1 value
list2 value RATHER THAN ____/ list3 value
list2 value ---------------/ list2 value
list2 value list1 value
list3 value list2 value
list3 value list1 value
list3 value list3 value
list3 value list3 value
如果有人可以让我朝着正确的方向迈出一步,我将不胜感激。 谢谢,
杰克
【问题讨论】:
-
向我们展示你是如何开始你的话题的。还要说明您得到的结果和预期的结果。
-
也许这个example 会有所帮助
-
您需要同步访问的资源是什么?似乎很可能是
List<Vector2>。您可能应该锁定它,而不是使用 appendContents() 所属对象的隐式锁定。如前所述,在高度并发的环境中,您的 appendContents() 方法可能会成为瓶颈并限制可扩展性。
标签: java multithreading input linked-list output