哪位大哥 帮我看看 关于线程同步的问题

![图片说明](https://img-ask.csdn.net/upload/201803/17/1521297307_427046.jpg)图片说明
请问图中出现多个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