请问图中出现多个16 这个是什么情况 我的代码 哪里有问题????
把obj的定义放在方法外面。
你的同步对象已经不是同一个了,线程创建好后,调用start方法启动线程,随后线程执行run方法,你看一下你的同不对像变了没?
你的同步代码块中同步的对象是你再线程中定义的对象,而同步的对象应该是线程竞争的资源,此处应该将obj换为number
把obj放在run 里面就OK了
而同步的对象应该是线程竞争的资源,此处应该将obj换为number
private int number = 100;
static Object obj = new Object(); //obj放在这里定义,且定义为静态变量,这样多个线程才是用的同一个锁
3个16是3个不同线程输出的,要么把number声明为静态全局的private static int number = 100; 要么把number和方法体system.out.pintln.....声明到一个object中并在外部创建这个object,然后同步这个object