我制作了一个程序,它使用单线程将文件中的数据读入链接列表让我们称之为LL1。从这里我做了一个线程池,它为每个线程分配一个处理任务,它从LL1读取数据并将其计算结果输出到一个新的链表中。 从这我需要输出每个线程新的链接列表成一个单一的文件。我试图输出连续的块,每个块链表,使线程不混合的数据,所以我使用了一个同步点如下:带线程池的Java线程队列
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
如果有人可以让我在正确的方向迈出的一步,将不胜感激。 谢谢,
杰克
向我们展示如何开始你的线程。还要澄清你得到的结果以及你的期望。 –
也许这[示例](http://arashmd.blogspot.com/2013/07/java-thread-example.html#fe)将帮助 – 2013-10-10 05:29:12
您需要同步访问权限的资源是什么?它似乎可能是'List'。您应该锁定它,而不是使用appendContents()所属对象的隐式锁定。正如所写,在高度并发的环境中,appendContents()方法可能会成为瓶颈并限制可伸缩性。 –
scottb