public class TestDemo{
public static void main(String[] args) {
final SyncDemo4 s = new SyncDemo4();
//final SyncDemo4 s1 = new SyncDemo4();
Thread t1 = new Thread(){
public void run(){
s.methodA();
}
};
Thread t2 = new Thread(){
public void run(){
s1.methodB();
}
};
t1.start();
t2.start();
}
public synchronized static void methodA(){
Thread t = Thread.currentThread();
try{
System.out.println(t+"SA开始排队!");
Thread.sleep(2000);
System.out.println(t+"SA排队完毕!!!");
}catch(Exception e){
}
}
public synchronized void methodB(){
Thread t = Thread.currentThread();
try{
System.out.println(t+"SB开始排队!");
Thread.sleep(2000);
System.out.println(t+"SB排队完毕!!!");
}catch(Exception e){
}
}
}
//大家看一下,为什么synchronized锁定了对象s,但是为什么t1和t2线程start的时候
t1和t2是并发执行的?按道理来说当t1执行methodA时,对象s应该就被锁定了,t2线程应该不能执行methodB,而是处于被阻塞的状态,等到t1执行完毕的时候才能够解除锁定。 但是结果是同步运行,。 另外大家注意一下,methodA是static方法,