社区
Java SE
帖子详情
synchronized和Lock 差别?
suhenhappy
2010-04-20 11:33:37
请问下高手们,synchronized和Lock有什么差别啊? 用法怎么用啊? 现在是用synchronize好?还是用lock好 ?
...全文
1162
6
打赏
收藏
synchronized和Lock 差别?
请问下高手们,synchronized和Lock有什么差别啊? 用法怎么用啊? 现在是用synchronize好?还是用lock好 ?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
alinchuan
2010-04-20
打赏
举报
回复
[Quote=引用 3 楼 bao110908 的回复:]
有区别
所实现的锁功能是一致的,但是 Lock 的功能更为强大一些。
比如 Lock 可以产生多个条件变量,可以实现多个类似于 wait, notifyAll 的等待及唤醒功能。而 synchronized 只有一个条件变量,也就是锁对象的 wait 和 notifyAll
[/Quote]
顶 学习啦 !
yugong2009
2010-04-20
打赏
举报
回复
[Quote=引用 4 楼 bao110908 的回复:]
synchronized 也有好处的,比如一些性能监控工具,可以监测到 synchronized 的锁。无法监测到 Lock 的锁定,毕竟 Lock 的锁定是通过代码实现的,而 synchronized 是在 JVM 层面上实现的。要监控工具能监测到 Lock 的锁定那还需要有一段时日。
另外,synchronized 在锁定时如果方法块抛出异常,JVM 会自动将锁释放掉,不会因为出了异常没……
[/Quote]
正解,学习……
火龙果被占用了
2010-04-20
打赏
举报
回复
synchronized 也有好处的,比如一些性能监控工具,可以监测到 synchronized 的锁。无法监测到 Lock 的锁定,毕竟 Lock 的锁定是通过代码实现的,而 synchronized 是在 JVM 层面上实现的。要监控工具能监测到 Lock 的锁定那还需要有一段时日。
另外,synchronized 在锁定时如果方法块抛出异常,JVM 会自动将锁释放掉,不会因为出了异常没有释放锁造成线程死锁。但是 Lock 的话就享受不到 JVM 带来自动的功能,出现异常时必须在 finally 将锁释放掉,否则将会引起死锁。Lock 锁的代码结构一般是这样的:
lock.lock();
try {
xxxx;
} finally {
lock.unlock();
}
火龙果被占用了
2010-04-20
打赏
举报
回复
有区别
所实现的锁功能是一致的,但是 Lock 的功能更为强大一些。
比如 Lock 可以产生多个条件变量,可以实现多个类似于 wait, notifyAll 的等待及唤醒功能。而 synchronized 只有一个条件变量,也就是锁对象的 wait 和 notifyAll
soli11722984
2010-04-20
打赏
举报
回复
java5新特性之一,这个LOCK可以有很多用处,不过也相对烦琐了一点
和synchronized对比之下,其实都是为了实现同步功能,只是实现不一样,具体哪个好,看需求
hbgzg3006
2010-04-20
打赏
举报
回复
我咋不知道还有lock呢。
b
lock
ed java线程_Java线程状态中B
LOCK
ED和WAITING有什么
差别
?
刚才在看CSDN的问答时。发现这个问题。原问题的作者是在观察jstack的输出时提出的疑问。那么B
LOCK
ED和WAITING有什么
差别
呢?答复在JDK源代码中能够找到,例如以下是java.lang.Thread.State类的一部分凝视。/*** Thread state for a thread b
lock
ed waiting for a monitor
lock
.* A thread in ...
synchronized
与
Lock
的区别
两者区别: 1.首先
synchronized
是java内置关键字,在jvm层面,
Lock
是个java类; 2.
synchronized
无法判断是否获取锁的状态,
Lock
可以判断是否获取到锁; 3.
synchronized
会自动释放锁(a线程执行完同步代码会释放锁 ;b 线程执行过程中发生异常会释放锁),
Lock
需在finally中手工释放锁(un
lock
()方法释放...
Java 最常见19个模块面试题—第三模块
Java 最常见19个模块面试题 今天时间充裕把面试题集的第三模块也归纳总结出来了。大家一起来探讨交流 第三模块 多线程 并行和并发有什么区别? 并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。 并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。 在一台处理器上“同时”处理多个任务,在多台处理器上同时处理多个任务。如hadoop分布式集群。 所以并...
多线程(5)——死锁、
Lock
锁、
synchronized
和
Lock
的对比
死锁 多个线程各自占有一个共享资源(同步监视器),并且都在等待对方释放,会导致死锁问题 比如线程A拿到了锁1,线程B拿到了锁2,但是A需要再拿到锁2,B需要再拿到锁1,才能完成各自的线程,这样就导致了死锁 所以最直观避免死锁的方法是,一个线程一次只能拿到一个共享资源,并且执行完该部分的方法后立即释放锁 死锁案例 public class TestDead
Lock
{ public static void main(String[] args) { Ticket t1=new
synchronized
和
lock
比对
前言:在上面的博客说了
synchronized
的一些用法,下面我们再来看看
lock
,这个出现频率也是非常高的一个。 1:获取
Lock
锁的几种方式 前面说了
synchronized
有锁对象和锁类对象,当某个线程获取锁其他线程必须等待执行完毕才可继续进行,比如线程A先获取锁,但是出现异常导致的后果就是线程B无法获取锁,会出现死锁的情况(http://www.cnblogs.com/LipeiNet
Java SE
62,622
社区成员
307,257
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章