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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© NNERO 中级黑马   /  2014-4-26 10:16  /  804 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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方法应该可以啊
不知道什么地方出问题了。。 求解答!!!

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

2 个回复

倒序浏览
1,你的线程是需要操作共享数据么?你这里两个线程操作的不是同一个对象
2,使用this.wait()不就可以了么?即当前线程等待,为什么你使用Res.class.wait()?有什么想法么?
回复 使用道具 举报
Res.class.wait()你这个代码是干啥的?直接用当前对象调用wait就可以啦。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马