为了账号安全,请及时绑定邮箱和手机立即绑定

JAVA加锁过程中遇到的问题

JAVA加锁过程中遇到的问题

慕丝7291255 2019-04-16 20:26:58
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会访问,所以根本不存在锁竞争。
                            
查看完整回答
反对 回复 2019-04-16
  • 2 回答
  • 0 关注
  • 336 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信