我有一個長度爲100的數組。我需要在多線程環境中使用它。總共有10個線程訪問數組。有可能兩個線程一次要寫入相同的索引。Array在多線程環境中。讀取和寫入兩者
Object[] data = new Object[100];
什麼是最好的方法來實現這一點。
解決方案1: 只有一個線程可以寫入數組。即使t1
和t2
線程想要寫入不同的索引,必須等待。即使我們可以使用arrayList
並且可以使用Collections.synchronizedList(....)。
public class ThreadSafeArray(){
private Object[] data = new Object[100];
public synchronized Object getValueAtIndex(int index){
return data[index]; // Removing index range check for simple explanation
}
public synchronized void setValueAtIndex(int index , Object value){
data[index] = value; // Removing index range check for simple explanation
}
}
解決方案2: 兩個不同的線程可以同時在兩個不同的索引編寫。
public class ThreadSafeArray(){
private Object[] data = new Object[100];
private Object[] lock = new Object[100];
public Object getValueAtIndex(int index){
synchronized(lock[index])
{
return data[index]; // Removing index range check for simple explanation
}
}
public void setValueAtIndex(int index , Object value){
synchronized(lock[index])
{
data[index] = value; // Removing index range check for simple explanation
}
}
}
有沒有更好的方法來實現這個要求?
你是用'VECTOR'或'CopyOnWriteArrayList'在JAVA –
你在做這個作爲一個練習,否則你最好重新發明輪子。此問題更適合codereview.stackexchange.com –
@NarendraPathai練習 – HakunaMatata