Java线程同步的方法

到底是synchronized和otatile,还是wait、sleep、notify、notifyall这两种回答到底哪个准确一点?... 到底是synchronized和otatile,还是wait、sleep、notify、notifyall
这两种回答到底哪个准确一点?
展开
 我来答
西门不才Bz
推荐于2017-09-21
知道答主
回答量:18
采纳率:0%
帮助的人:4.2万
展开全部
等待唤醒机制
wait():让线程等待。将线程存储到一个线程池中。
notify():唤醒被等待的线程。通常都唤醒线程池中的第一个。让被唤醒的线程处于临时阻塞状态。
notifyAll(): 唤醒所有的等待线程。将线程池中的所有线程都唤醒,让它们从冻结状体转到临时阻塞状态.
这三个方法用于操作线程,可是定义在了Object类中,为什么呢?
因为,这三个方法在使用时,都需要定义在同步中,要明确这些方法所操作的线程所属于锁。
简单说。在A锁被wait的线程,只能被A锁的notify方法唤醒。
所以必须要表示wait notify方法所属的锁对象,而锁对象可以是任意的对象。
可以被任意的对象调用的方法肯定定义在Object类中。
注意:等待唤醒机制,通常都用在同步中,因为需要锁的支持。
而且必须要明确wait notify 所作用的锁对象。

JDK1.5后的锁

在jdk1.5版本之后,
出现了一些新的特性,将原理的线程进行了改良。
在java.util.concurrent.locks包中提供了一个接口Lock。替代了synchronized。
synchronized。使用的是锁操作是隐式的。
Lock接口,使用的锁操作是显示的。
由两个方法来完成:
lock():获取锁。
unlock():释放锁。
还有一个对象,Condition.
该对象的出现替代了Object中的wait notify notifyAll这些操作监视器的方法。
替代后的方式:await signal signalAll.
雨月怡景
2013-03-15
知道答主
回答量:6
采纳率:0%
帮助的人:6075
展开全部
线程同步有两种方法:同步代码块和同步方法,用synochronized来修饰。

线程同步就是使用线程同时运行多个任务时,使用这样的锁机制来实现。这就关系到了线程之间的先后执行,相互协调,为了使线程之间的执行不会相互产生影响,更好的通信,so这些方法 wait(),sleep(),notify(),notifyall(),就自然而然的产生了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jsntzsy
2015-09-16 · 超过12用户采纳过TA的回答
知道答主
回答量:86
采纳率:0%
帮助的人:37.9万
展开全部
一般在JAVA线程中,我们采用 synchronized {...} 或 synchronized方法去描述一块语句为同步语句块,用synchronized包裹的语句在多个线程同时运行时只会有一个线程执行该段语句块,在使用synchronized关键字时候,应该尽可能避免在synchronized方法或synchronized块中使用sleep或者yield方法,因为synchronized程序块占有着对象锁,你休息那么其他的线程只能一边等着你醒来执行完了才能执行。不但严重影响效率,也不合逻辑。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xanjun5
2013-03-13 · 超过11用户采纳过TA的回答
知道答主
回答量:62
采纳率:0%
帮助的人:33.4万
展开全部
你们几个回答我都没看懂,同步就是synchronized,是让所有的线程执行一个代码段之前排队,一个一个去执行这个代码段。

好像路边的公共厕所,一间只能一个人上。外面不管有多少人排队,里面那个人出来,才能再进去一个人。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
点影天下
推荐于2017-09-06 · TA获得超过276个赞
知道小有建树答主
回答量:1474
采纳率:0%
帮助的人:640万
展开全部
1、使用synchronized对整个方法同步

2、使用线程安全的类,例如Hashtable,或者Collections中的同步list或者map
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式