论坛首页 入门技术论坛

【解惑】 正确理解线程等待和释放(wait/notify)

浏览 13871 次
该帖已经被评为新手帖
作者 正文
   发表时间:2009-12-30  
对于锁的问题,关键是知道锁在谁手上
定义了一个synchronized 对象,意义上是把这个作为多线程之间的一把锁,
让线程wait,并不意味让这个对象wait
所以要释放正确的锁
0 请登录后投票
   发表时间:2009-12-30  
zhaomiaojun 写道
对于锁的问题,关键是知道锁在谁手上
定义了一个synchronized 对象,意义上是把这个作为多线程之间的一把锁,
让线程wait,并不意味让这个对象wait
所以要释放正确的锁


这个观点比较认同,呵呵。 锁的是资源,不是线程类
0 请登录后投票
   发表时间:2009-12-30  
xzqttt 写道
很明显的错误,oa和ob是两个对象



我在多线程方面不熟,很多时候会犯低级错误。

不过oa,ob为什么是两个对象。奇怪了,他们引用的都是lock吗?这个我确定,不用再讨论了。

不过感谢大家的讨论,这个问题我现在清楚不少了,呵呵,谢谢

还有:我都两次被评新手帖了,这到没什么。主要问题是每次被评为新手帖JavaEye都要我回答一次破问卷,才能重新发帖。好烦哪?

JavaEye是不错的网站,但好东西是要简单的。规矩多了,不是好事
0 请登录后投票
   发表时间:2010-02-27  
rain2005 写道
wait不是改变锁的状态,是把当前线程放到锁的等待队列里面,notify就是从锁的等待队列里面选择第一个等待的线程进行调度。每个对象都有一个唯一的锁。

wait, notify操作首先保证当前线程持有锁。


对于上面我有不观点:notify就是从锁的等待队列里面选择第一个等待的线程进行调度。
我认为是是从锁的等待队列里面唤醒一个线程,唤醒哪个线程是不确定的或任意的;如果等待队列里面只有一个线程,那么就会唤醒这个线程。这里的唤醒与sleep并不是对等关系。唤醒之后的线程进入就绪队列,等待被选择执行。
0 请登录后投票
   发表时间:2010-08-05  
最近在研究线程 
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics