美文网首页
Java中相对synchronized,SDK Lock的优势

Java中相对synchronized,SDK Lock的优势

作者: 慢游世界 | 来源:发表于2019-10-08 22:29 被阅读0次

    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稳定。

    相关文章

      网友评论

          本文标题:Java中相对synchronized,SDK Lock的优势

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