首先 这个程序确实运行了2个线程
没有打印出来的原因是
System.out.println(Thread.currentThread().getName()+"has sold ticks num is:"+n);//打印当前线程取到的数据
这句话的位置不对. 判断一个线程是否运行了 应该直接放在run方法开始的位置 你试试 能打印出来
第二 synchronized(SoldTicks.class/*this/*Clock.lock*/){//为什么SoldTicks.class不能同步
这个确实能同步, 只不过是你没有判断出来, SoldTicks.class/Clock.lock 可以同步
你可以在这句下面加个Thread.sleep(10000); System.out.println(Thread.currentThread().getName());
应该是先打印出一句 然后 等10秒再打印一句
如果换成this 就是两句话一起打印出来然后等10秒左右
你程序里的this不能同步 因为两个线程对象使用的不会去争夺不同的对象,
因为第二个线程开始的时候 n已经是0了