synchronized 是公平锁吗?可以重入吗?详细的来说说 synchronized
公平锁:
获取不到锁的时候,会自动加入队列,等待线程释放后,队列的第一个线程获取锁
非公平锁:
获取不到锁的时候,会自动加入队列,等待线程释放锁后所有等待的线程同时去竞争
什么是可重入?
同一个线程可以反复获取锁多次,然后需要释放多次
回答标题问题:synchronized 是非公平锁,可以重入。
在来看几个问题:
1、 synchronized 加在 static 修饰的 方法上锁的是哪个对象?
答:锁的是 Class 对象
2、synchronized(this) 锁的是哪个对象?
答:锁的是当前对象的实例也就是 new 出来的对象
3、synchronized() 锁的是哪个对象?
答:同 synchronized(this) 锁的也是当前对象的实例
4、synchronized(lock) 锁的是哪个对象?
答:锁的是 lock 对象。
5、同一个对象里面 有 static 方法加了 synchronized 还有一个普通方法也加了 synchronized 如果这个时候有2个线程,一个先获取 了 static 方法上的锁,另外一个线程可以在 第一个线程释放锁之前获取 普通方法上的锁吗?反过来呢?
答:可以的,因为这是 2 把锁,2 个线程分别获取2把锁,没有任何问题。
更多问题可以扫码
版权声明:本文为wab719591157原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。