黑马程序员技术交流社区

标题: 线程wait,notify问题 [打印本页]

作者: NNERO    时间: 2014-4-26 10:16
标题: 线程wait,notify问题
本帖最后由 NNERO 于 2014-4-26 14:56 编辑
  1. public class Text111
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Res r1 = new Res("nero",18);
  6.                 Ras r2 = new Ras("nnnnnero","man");
  7.                 Thread t1 = new Thread(r1);
  8.       
  9.                
  10.                 t1.start();
  11.          
  12.                 r2.start();
  13.         }
  14. }
  15. class Res implements Runnable{
  16.         String name;
  17.         int age;
  18.         int count = 100;
  19.         boolean flag = true;
  20.         
  21.         public Res(String name, int age) {
  22.                 super();
  23.                 this.name = name;
  24.                 this.age = age;
  25.         }

  26.         public void run(){
  27.                 while(true){
  28.                         synchronized(Res.class){
  29.                                 try {
  30.                                         if(!flag)
  31.                                                 Res.class.wait();
  32.                                 } catch (InterruptedException e) {
  33.                                         e.printStackTrace();
  34.                                 }
  35.                                         if(count>0){
  36.                                                 count--;
  37.                                                 System.out.println(Thread.currentThread().getName()+"..."+name+"..."+age+"..."+count);
  38.                                                 flag=true;
  39.                                         }
  40.                                         Res.class.notify();
  41.                         }
  42.                 }
  43.         }
  44. }
  45. class Ras extends Thread{
  46.         String name;
  47.         String sex;
  48.         int count=100;
  49.         boolean flag = true;
  50.         
  51.         public Ras(String name, String sex) {
  52.                 super();
  53.                 this.name = name;
  54.                 this.sex = sex;
  55.         }
  56.         public void run(){
  57.                 while(true){
  58.                         synchronized(Ras.class){
  59.                                 if(flag)
  60.                                         try {
  61.                                                 Res.class.wait();
  62.                                         } catch (InterruptedException e) {                                
  63.                                                 e.printStackTrace();
  64.                                         }
  65.                                 if(count>0){
  66.                                         System.out.println(name+"::"+sex);
  67.                                         count--;
  68.                                         flag = false;
  69.                                 }
  70.                                 Res.class.notify();
  71.                         }
  72.                 }
  73.         }
  74. }
复制代码
我用了2种方法创建了2个线程,想让它们交替打印,但是运行出错啊。
我知道2个线程的wait方法必须用同一个锁,但是我这里Res.class这个其实也是同一个对象啊,直接调用它的wait方法应该可以啊
不知道什么地方出问题了。。 求解答!!!

作者: 王松松    时间: 2014-4-26 11:49
1,你的线程是需要操作共享数据么?你这里两个线程操作的不是同一个对象
2,使用this.wait()不就可以了么?即当前线程等待,为什么你使用Res.class.wait()?有什么想法么?
作者: 你为谁归来    时间: 2014-4-26 13:21
Res.class.wait()你这个代码是干啥的?直接用当前对象调用wait就可以啦。




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