public class MaxScore {
int max;
public MaxScore() {
max = 0;
}
public synchronized void currentScore(int s) {
if(s> max) {
max = s;
}
}
public int max() {
return max;
}
public synchronized void reset() {
max = 0;
}
}当多个线程访问reset方法(当被访问时)不仅将阻塞 reset() 方法的其他调用,而且也将阻塞 MaxScore 类的同一个实例中的 currentScore() 方法,因为这两个方法都访问同一个锁(this)
import java.util.*;
public class Jury {
Vector members;
Vector alternates;
public Jury() {
members = new Vector(12, 1);
alternates = new Vector(12, 1);
}
public synchronized void addMember(String name) {
members.add(name);
}
public synchronized void addAlt(String name) {
alternates.add(name);
}
public synchronized Vector all() {
Vector retval = new Vector(members);
retval.addAll(alternates);
return retval;
}
}
此处多个线程可以同时访问addMember,addAlt,all方法吗?如果可以上面的那段话是哪儿错了呢?
import java.util.*;
public class Jury {
Vector members;
Vector alternates;
public Jury() {
members = new Vector(12, 1);
alternates = new Vector(12, 1);
}
public void addMember(String name) {
synchronized(members) {
members.add(name);
}
}
public void addAlt(String name) {
synchronized(alternates){
alternates.add(name);
}
}
public synchronized Vector all() {
Vector retval = new Vector(members);
retval.addAll(alternates);
return retval;
}
}按楼主的意思,只要锁不同的对象就可以了
应为当其中一个线程访问带有synchronized方法时,他就拿到了对象锁Jury (this),其它线程就被拒之门外了(不知道说的对不对)