Java多线程锁对象的改变

时间:2021-11-22 13:05:42

在将任何数据类型作为同步锁时,需要注意的是,是否有多个线程同时持有锁对象,如果同时持有相同的锁对象,则这些线程之间就是同步的;如果分别获得锁对象,这些线程之间就是异步的。

Java多线程锁对象的改变
Java多线程锁对象的改变

这个时候线程A和B持有的锁都是”123”,虽然将锁改成了”456”,但结果还是同步的,因为A和B共同争抢的锁是”123”。

把Thread.sleep(50)放开
Java多线程锁对象的改变

这个时候A取得的锁是”123”,过了50毫秒之后B线程取得的锁上”456”。所以是异步的。

友情提示:只要对象不变,即使对象的属性被改变,运行的结果还是同步的。