A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 刘 佳 中级黑马   /  2012-10-15 12:06  /  2081 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘 佳 于 2012-10-15 12:09 编辑

最大区别在哪里?主要是视频后段话没明白,毕老师说lock最牛的地方在于。。。。这里就没懂牛在哪?它比synchronized强在哪呢?

还有interrupt的使用,interrupt不是抛出异常吗?为何不处理?我看API里面说接收一个异常,接收异常是什么意思?搞糊涂了,希望有人能指点迷津

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
不知道前面synchronized的唤醒你看懂没有,
多个线程操作资源时,
本方线程会唤醒本方线程,多生产或者多消费。
解决方法是全部唤醒。每次唤醒都while判断比较。
Lock中,
一个锁对应多个Condition,代表多个线程
可以实现只操作对方线程。

假设A获取锁,B将等待A释放锁,
     synchronized ,如果A不释放,B将一直等下去,不能被中断
     ReentrantLock,如果A不释放,可以使B在等待了足够长的时间以后,中断等待,而干别的事情。

当然,Lock还有其他的好处,可以去看它的方法。



回复 使用道具 举报
李建强 发表于 2012-10-15 13:05
不知道前面synchronized的唤醒你看懂没有,
多个线程操作资源时,
本方线程会唤醒本方线程,多生产或者多消 ...

这个明白,就是老毕最后说的那段话没明白,什么synchronized怎么怎么样会导致嵌套同步死锁。然后lock就不会,,什么意思呢?
回复 使用道具 举报
刘 佳 发表于 2012-10-15 13:09
这个明白,就是老毕最后说的那段话没明白,什么synchronized怎么怎么样会导致嵌套同步死锁。然后lock就不 ...

因为Lock只有一个锁,当然不会死锁。
condition只是一个条件,这个条件可以认为是一个标记,具体是通过代码实现的。
condition是一个接口,通过Lock的newCondition与Lock绑在一块。
一个锁可以绑多个condition。
一个锁有多个条件,每个条件下面有多个线程,可以精确处理这个条件下的线程,让他们等待、唤醒等。

synchronized就不可以,因为它的等待、唤醒等都是使用的Object的方法,处理很粗糙。
才会出现同时唤醒所有,同时等待所有的情况,不能分条件处理。

condition很抽象,它不是自然事物,而是一种代码控制手段。
回复 使用道具 举报
王乐 发表于 2012-10-15 13:56
在1个synchronized同步的代码中,如果想使用多个wait notify方法的话就必须创建多个synchronized锁,因为 ...

嗯,就是你说的这段话。
如果想使用多个wait notify方法的话就必须创建多个synchronized锁,因为1个synchronized只能对应1组wait notify方法。
就是这句话不理解什么意思?为什么一个synchronized只能对应一组wait notify啊?
回复 使用道具 举报
王乐 发表于 2012-10-16 11:33
记得视频里的教程调用wait的时候好像省略了this,可能就是因为这个把你弄晕了
在程序执行到wait语句的时候 ...

哦,谢谢,有点明白了,我再体会体会
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马