开发者社区> 问答> 正文

Synchronized 和 Lock 有什么区别?

Synchronized 和 Lock 有什么区别?

展开
收起
问问小秘 2020-01-03 14:05:18 842 0
来自:Java开发者
1 条回答
写回答
取消 提交回答
  • 首先synchronized是java内置关键字,在jvm层面,Lock是个java类;

    synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁;

    synchronized会自动释放锁(a 线程执行完同步代码会释放锁 ;b 线程执行过程中发生异常会释放锁),Lock需在finally中手工释放锁(unlock()方法释放锁),否则容易造成线程死锁;

    用synchronized关键字的两个线程1和线程2,如果当前线程1获得锁,线程2线程等待。如果线程1阻塞,线程2则会一直等待下去,而Lock锁就不一定会等待下去,如果尝试获取不到锁,线程可以不用一直等待就结束了;

    synchronized的锁可重入、不可中断、非公平,而Lock锁可重入、可判断、可公平(两者皆可);

    Lock锁适合大量同步的代码的同步问题,synchronized锁适合代码少量的同步问题

    2020-01-03 14:05:30
    赞同 展开评论 打赏
问答地址:
来源圈子
更多
收录在圈子:
+ 订阅
Java开发者成长课堂,课程资料学习,实战案例解析,Java工程师必备词汇等你来~
问答排行榜
最热
最新

相关电子书

更多
How Simplicity Will Unlock the 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载