我有一個多線程程序,其中一個線程正在讀取數據並且多個其他人正在處理該數據。如果我有一個寫入線程連續添加數據(Example.add()
)和其他讀取程序線程順序讀取該數據(Example.getData(1)
,Example.getData(2)
,...),阻止讀取程序的最佳方式是什麼,直到他們請求的索引處的數據可用?阻塞直到元素可用
這個問題有點像生產者 - 消費者,但我不想「消費」數據。
public class Example {
private ArrayList<Integer> data;
public Example() {
data = new ArrayList<Integer>();
}
public int getData(int i) {
// I want to block here until the element
// index i is available.
return data.get(i);
}
public void add(int n) {
data.add(n);
}
}
這聽起來像你想要麼'Future'(內置於Java,但更多的限制)或'Promise'(較新,反應器規範的一部分)。 – chrylis