Java中相对synchronized,SDK Lock的优势

1.synchronized的问题在于,一旦获取锁不成功,线程会进入阻塞状态,如果发生死锁,线程就没有被唤醒的机会了。SDK的Lock提供了3个方法可以防止线程永远的等待下去:

// 支持中断的 API
void lockInterruptibly() 
  throws InterruptedException;
// 支持超时的 API
boolean tryLock(long time, TimeUnit unit) 
  throws InterruptedException;
// 支持非阻塞获取锁的 API
boolean tryLock();

所以调用以上方法获取锁失败,可以返回,并释放资源,防止死锁。

2.Lock可以通过newCondition()来创建多个条件,如condition1condition2,线程调用condition1.await()condition2.await(),从而选择等待哪个条件;而synchronized修饰的方法或代码块只能通过lock.wait()(lock是一个Objcet)实现等待。

3.Lock可以实现公平锁和非公平锁,synchronized底层是非公平锁。

4.低并发时,由于synchronized具有分级锁的特性,性能跟Lock差不多。但高并发时,由于竞争激烈synchronized会升级为重量级锁,性能没有Lock稳定。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容