一个方法调用性能问题

[code="java"]

public class Test {
private static List list ;

static{
    list = new ArrayList<String>();
    list.add("0");
    list.add("1");
    list.add("2");
    list.add("3");
}

public String get(int subscript){
    return list.get(subscript);
}

public boolean update(){
    list.clear();
    list.add("a");
    list.add("b");
    list.add("c");
    list.add("d");
    return true;
}

private Test(){}

public static Test getInstance(){
    return SingleHolder.instance;
} 

private static class SingleHolder{
    private static final Test instance = new Test();
}

}

[/code]

程序在正在调用 get 时 不能调用 update
当程序正在调用update 时 get 不能调用
update 可能n久不能调用
如果加锁 怎么写性能最高

楼上的方式最好了!当然如果仅仅是对数组或Map的操作可以试试已经提供的集合类如:

CopyOnWriteArrayList 比较适合多读取很少更新的操作。比锁的机制更高效。常用的方法 addIfAbsent,addAllAbsent,addAll,add,removeAll 如果能灵活运用,应该也可以满足需求了

方法1: List变成vector,那么可以在最细粒度控制线程安全。
方法2:
public String get(int subscript){

synchronized (this) {
return list.get(subscript);

}
}

public boolean update(){
   synchronized (this) {
    list.clear();   
    list.add("a");   
    list.add("b");   
    list.add("c");   
    list.add("d");   
    return true;   
   }   
}   

方法3,在以上两个方法上直接加上 synchronized 。

好坏从1到3。

[code="java"] private final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
private final Lock r = rwl.readLock();
private final Lock w = rwl.writeLock();

public String get(int subscript){
    r.lock();

try{

return list.get(subscript);

}finally{r.unlock();}
}

public boolean update(){   

w.lock();
try{
list.clear();

list.add("a");

list.add("b");

list.add("c");

list.add("d");

return true; }finally{w.unlock();}
}
[/code]
这样才是最优的(就目前本人所知),至于原理参考jdk文档或者网络资料吧