publicclassTextSyncimplementsRunnable{/***@Vesine*多线程锁问题程序*2014年12月23日15:47:32*/Timertimer=newTimer();publicstaticvoidmain(String[]args){Threadt1=newThread(newTextSync());Threadt2=newThread(newTextSync());t1.setName("MYThread1");t2.setName("MYThread2");t1.start();t2.start();}publicvoidrun(){timer.add(Thread.currentThread().getName());}}publicclassTimer{privatestaticintnum=0;publicsynchronizedvoidadd(Stringname){num++;try{Thread.sleep(1);}catch(InterruptedExceptione){e.printStackTrace();}System.out.println(name+":你是第"+num+"个访问线程");}}为什么加锁后程序运行结果仍为MYThread1:你是第2个访问线程MYThread2:你是第2个访问线程
2 回答
HUX布斯
TA贡献1876条经验 获得超6个赞
synchronized修饰方法时“同时只能有一个线程访问当前方法”针对的是同一个对象。你的例子里,每个TextSync都new了自己的Timer,不是同一个对象,synchronized修饰的方法同一时间只有自己的TextSync会访问,所以根本不存在锁竞争。
添加回答
举报
0/150
提交
取消