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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李有 中级黑马   /  2012-11-30 18:57  /  1318 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

java线程中的调用wait()方法的被阻塞线程,被唤醒后,
是不是还是从wait()语句的下面接着执行啊?
求详解

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
wait()是用来锁定一个对象的,在调用这个notify()方法前,他后面的代码永远不会被执行。
锁定后不能自动解锁, 必须在另一个线程中调用这个对象的notify()方法,去解锁,而本线程调用的notify() 只能去解开别的线程的锁。
注意,notify()一定是在另外一个线程中调用的,用wait()这样的锁是不可能在自己的线程中解锁的。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
通常,多线程之间需要协调工作:如果条件不满足,则等待;当条件满足时,等待该条件的线程将被唤醒。在Java中,这个机制的实现依赖于wait/notify。等待机制与锁机制是密切关联的。

例如:
  synchronized(obj) {
  while(!condition) {
  obj.wait();
  }
  obj.doSomething();
  }
  
  当线程A获得了obj锁后,发现条件condition不满足,无法继续下一处理,于是线程A就wait()。
  在另一线程B中,如果B更改了某些条件,使得线程A的condition条件满足了,就可以唤醒线程A :
  
  synchronized(obj) {
  condition = true;
  obj.notify();
  }
  

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
是的,你可以做个试验,两个线程,一个线程循环输出100,输出到60的时候,wait,然后让另一个线程唤醒他,并输出一句话,唤醒后,接着从61继续输出,从哪等,从哪醒
回复 使用道具 举报
Java多线程中wait语句的具体使用 ...
Java多线程在使用的时候会有很多语句需要我们具体的学习,在这其中wait()就是其中的一个。当然我们需要不断的努力学习才能掌握这一个语句的应用,下面的代码会对你学习Java <http://developer.51cto.com/art/200510/6983.htm%20%20>多线程有所帮助。   1.class ThreadA   2.{   3.public static void main(String[] args)   4.{   5.ThreadB b=new ThreadB();   6.b.start();   7.System.out.println("b is start....");   8.synchronized(b)//同步,请求获得对象锁,如果是子线程先进入,则这里阻塞   9.{   10.try   11.{   12.System.out.println("Waiting for b to complete...");   13.b.wait();//获得对象锁后,可以调用对象的wait方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马