对象锁你是可以自己指定的,你可以把当前类对象传过来,那代码块的对象锁就是这个类对象。在线程间通信的时候,notify只能唤醒拥有相同锁的线程。
10多年建站经验, 成都网站建设、网站制作客户的见证与正确选择。成都创新互联公司提供完善的营销型网页建站明细报价表。后期开发更加便捷高效,我们致力于追求更美、更快、更规范。
synchronized(这里的对象你看成一道门) {
这里是一个人进来了,把门反锁了
需要同步操作的代码
这里是里面的人事情做完了,出去了,门开着其他人可以进了
}
至于怎么锁的,这是java和jvm的规定和实现细节,作为普通程序员没必要深入那么多。
一般只有需要多个线程共享的变量才需要加同步锁,这样保持了数据的一致性。
从微观上来看,即时不加同步代码块,同一时刻也只有一个线程在跑,只不过它们交替运行,间隔时间几乎可以忽略,所以看上去是同步的。同理加了同步代码块,只是增加了一个线程访问某一块的等待时间,这种等待时间几乎可以忽略不计,但是对数据的一致性来说又是非常重要的。
不知道这么说楼主能不能理解。
同步代码块是并发的时候锁定一个代码块只能一个线程占用,同步方法是对方法的锁定,如果能同步代码块尽量不要同步方法,否则影响效率