黑马程序员技术交流社区

标题: java线程中的wait() [打印本页]

作者: 李有    时间: 2012-11-30 18:57
标题: java线程中的wait()
java线程中的调用wait()方法的被阻塞线程,被唤醒后,
是不是还是从wait()语句的下面接着执行啊?
求详解
作者: 郝少普    时间: 2012-11-30 19:33
wait()是用来锁定一个对象的,在调用这个notify()方法前,他后面的代码永远不会被执行。
锁定后不能自动解锁, 必须在另一个线程中调用这个对象的notify()方法,去解锁,而本线程调用的notify() 只能去解开别的线程的锁。
注意,notify()一定是在另外一个线程中调用的,用wait()这样的锁是不可能在自己的线程中解锁的。
作者: 快乐之恋    时间: 2012-11-30 19:40
通常,多线程之间需要协调工作:如果条件不满足,则等待;当条件满足时,等待该条件的线程将被唤醒。在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();
  }
  


作者: 崔政    时间: 2012-11-30 19:45
是的,你可以做个试验,两个线程,一个线程循环输出100,输出到60的时候,wait,然后让另一个线程唤醒他,并输出一句话,唤醒后,接着从61继续输出,从哪等,从哪醒
作者: tfy    时间: 2012-12-1 09:25
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方法




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2