美文网首页
synchronized()括号中this Object 类.t

synchronized()括号中this Object 类.t

作者: 阡陌昏晨 | 来源:发表于2020-06-10 18:30 被阅读0次

synchronized锁住的是代码还是对象?
答案是:synchronized锁住的是括号里的对象,而不是代码。对于非static的synchronized方法,锁的就是对象本身也就是this。
当synchronized锁住一个对象后,别的线程如果也想拿到这个对象的锁,就必须等待这个线程执行完成释放锁,才能再次给对象加锁,这样才达到线程同步的目的。即使两个不同的代码段,都要锁同一个对象,那么这两个代码段也不能在多线程环境下同时运行。
所以我们在用synchronized关键字的时候,能缩小代码段的范围就尽量缩小,能在代码段上加同步就不要再整个方法上加同步。这叫减小锁的粒度,使代码更大程度的并发。原因是基于以上的思想,锁的代码段太长了,别的线程是不是要等很久,等的花儿都谢了。当然这段是题外话,与本文核心思想并无太大关联。

1、当括号中是this就说明,当前对象是锁。某个线程拿到了该锁,就可以对当前对象做操作,其他线程无法访问。
2、当括号中是类.this就说明,该类是锁。某个线程拿到了该锁,就可以对当前类做操作,其他线程无法访问操作该类
3、当括号中是object,就是普通的对象。

相关文章

网友评论

      本文标题:synchronized()括号中this Object 类.t

      本文链接:https://www.haomeiwen.com/subject/bviptktx.html