为什么synchronized可以达到线程同步的效果?加在方法上的synchronized不是只是调用这个方法的对象被锁定的吗?
t1.start();时执行Timer类的public synchronized void add(String name)方法,此时t1对象还是t1的timer属性对象被锁定了?
如果是t1对象被锁定,也不会影响t2,t3,t4的执行啊。如果是t1的timer属性对象被锁定,那么也不会影响t2,t3,t4的执行啊。
可是代码的执行效果来看,就是影响了t2,t3,t4的执行!是因为num 属性是静态的吗?
求高手指点下啊
public class TestSync implements Runnable{
Timer timer = new Timer();
public static void main(String args[]){
TestSync test = new TestSync();
Thread t1 = new Thread(test);
Thread t2 = new Thread(test);
Thread t3 = new Thread(test);
Thread t4 = new Thread(test);
t1.setName("t1");
t2.setName("t2");
t3.setName("t3");
t4.setName("t4");
t1.start();
t2.start();
t3.start();
t4.start();
}
public void run(){
timer.add(Thread.currentThread().getName());
}
}
class Timer{
private static int num = 0 ;
public synchronized void add(String name){
num++;
try{
Thread.sleep(100);
}catch(InterruptedException e){
}
System.out.println(name+",你是第"+num+"个使用timer的线程");
}
}
输出:
t1,你是第1个使用timer的线程
t4,你是第2个使用timer的线程
t2,你是第3个使用timer的线程
t3,你是第4个使用timer的线程