synchornized锁的对象可以是方法、对象、和类。
比如
class Test {
public int share;
public static share2;
synchronized public void getShare(){
Thread.sleep(5000);
return share;
}
synchronized public void getShare2(){
Thread.sleep(5000);
return share;
}
public void print(){
System.out.println("print test");
}
static public void print(String ok){
System.out.println("print test : " + ok);
}
}
如果对Test的实例上锁,那么其它的线程就无法访问该实例的synchronized方法,但是可以访问该实例没有synchronized的方法和静态的方法。
如果该方法内部调用了wait()方法,那么其它的线程可以访问该对象的synchronized方法。
如果对Test这个类上锁,那么该类的静态方法不能被其它的线程访问。但是实例方法可以被访问到,如果该实例为被上锁的话。