黑马程序员技术交流社区

标题: 关于Object lock的问题 [打印本页]

作者: lovewyy    时间: 2014-7-3 20:26
标题: 关于Object lock的问题

package demo8;
import java.util.Scanner;
class Processor {
public Object lock = new Object();

public void comsumer() {
  System.out.println("coming into producer");
  Scanner scan = new Scanner(System.in);
  try {
   Thread.sleep(2000);
  } catch (InterruptedException e1) {
   e1.printStackTrace();
  }
  
  synchronized (this) {//这里改为lock对象运行会出错,没搞明白
   System.out.println("put a word to run notify() : ");
   scan.nextLine();
   notify();
   System.out.println("after notify()");
   
   try {
    Thread.sleep(3000);
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }

  System.out.println("after three seconds");
}
public void producer() {
  synchronized (this) {//这里改为lock对象运行会出错,没搞明白
   System.out.println("coming into comsumer");
   try {
    wait();
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   System.out.println("after wait");
  }
}
}
public class App {
public void doWork() {
  
  final Processor processor = new Processor();
  
  Thread thread1 = new Thread(new Runnable() {
   @Override
   public void run() {
    // TODO Auto-generated method stub
    processor.producer();
   }
  });
  Thread thread2 = new Thread(new Runnable() {
   @Override
   public void run() {
    // TODO Auto-generated method stub
    processor.comsumer();
   }
  });
  thread1.start();
  thread2.start();
}
public static void main(String[] args) {
  App app = new App();
  app.doWork();
}
}
这个代码可以直接运行,问题在请看代码注释。


作者: android0276    时间: 2014-7-3 20:26
wait() 和 notify()  都是object中的方法,是对象锁!直接调用,其实暗含了一个this,锁的对象是processor (final Processor processor = new Processor();),而你同步的是lock这个对象。在使用lock对象的时候,修改为lock.wait();和lock.notify();就可以正常运行。

望采纳
作者: lovewyy    时间: 2014-7-3 20:28
android0276 发表于 2014-7-3 20:27
wait() 和 notify()  都是object中的方法,是对象锁!直接调用,其实暗含了一个this,锁的对象是processor  ...

我按你的思路试了一下,正解,分给你吧




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