我製作了一個程序,它使用單線程將文件中的數據讀入鏈接列表讓我們稱之爲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