2016-11-04 46 views
0

我想創建一個程序,其中整數列表使用多個線程進行排序,多個線程可以在多個步驟中讀取並寫入特定部分。每個線程都是同一對象的一個​​實例,並且與列表的同一部分上的其他線程一起工作。我的問題是每個線程無法看到其他線程對列表所做的更改,因此列表中的某些初始元素會丟失。有沒有辦法刷新或更新列表,以便線程能夠擁有更改的列表?正在更新從多個線程共享的列表int Java

+0

https://docs.oracle.com/javase/tutorial/essential/concurrency/sync.html – shmosel

回答

-1

剛剛使用Java8 parallel Streams怎麼辦?

List<Integer> sortedList = theList.parallelStream() 
            .sorted() 
            .collect(Collectors.toList()); 
0
  1. 如果你想確保所有線程訪問相同的列表,使靜態的或共享變量。

  2. 如何使用,而不是列出一個Vector,Vector是線程安全的

如果多個線程同時訪問一個ArrayList那麼我們就必須在外部同步的代碼修改了該列表或者結構或簡單的修改了塊一個元素。結構修改意味着從列表中添加或刪除元素。設置現有元素的值不是結構修改。

Collections.synchronizedList通常在創建列表時使用,以避免意外的非同步訪問列表。

Link to reference

+0

我使用的陣列,而不是ArrayList的。我試着讓列表成爲靜態的,但它並沒有改變任何東西,Vector也沒有我想要使用的方法。還有什麼我應該做的清單工作或一個具體的例子? – orestrag97

+0

@ orestrag97在你的問題中,你明確指出你正在使用_「整數列表」_,現在你說_「我正在使用一個數組而不是ArrayList。」_ - 那它是什麼?數組或列表?並且請相應地更新您的問題以說清楚。 –