我有一個大的ArrayList對象類似於以下大對象數組在多個線程之間共享。線程安全技術
class Entry {
private String variable1 = null;
private int variable2 = 0;
public Entry (String variable1) {
this.variable1 = variable1;
}
/* getters and setters for variable1 and 2 are below */
}
我開始在ArrayList中的對象,然後創建多個線程。每個線程搜索大量文檔以確定變量1的內容是否嵌入在文檔中。如果是,我想使進入的副本,具體到線程,類似如下:
public Entry(Entry entry) {
this(entry.getVariable1())
}
然後我想改變複製的變量2的內容不是原來的。總結如下:
- 對象值在線程化之前被初始化。
- 這些對象由多個線程共享(只讀)。
- 當需要修改對象時,將創建對象的副本並對副本進行更改。
這是我的問題。
- 是否需要同步變量1和變量2的getter和setter。由於我只是在線程之間共享時讀取對象,這看起來不必要,但如果我錯了,請糾正我。
- 有沒有更好的方法來分享一個大的數組列表信息。 (我不想複製每個線程的數組列表,因爲它大於200K的對象)?
ArrayList是隻讀的嗎? (我的意思是沒有添加任何東西,沒有刪除。)如果答案是肯定的,你可以安全地共享你的列表。但是,如果您自己修改對象,則可能需要在那裏進行同步。 – biziclop 2012-04-19 12:21:44