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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© doyxy 中级黑马   /  2014-3-14 21:30  /  707 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 doyxy 于 2014-3-14 21:43 编辑

犯了低级错误,if把后面的东西全括进去了,晕死


看毕老师day12的视频,发现怎么改都运行不了,仔细查看了代码,和视频里的一样,,但是运行起来就是没有输出,空白的,实在是找不到哪里出问题了,请大家指点一下



  1. public class ThreadCommunication {

  2.         /*
  3.          * 设计一个简单的多线程同时操作一个对象的例子,解决安全问题 创建两个线程,一个输入姓名性别,一个输出姓名性别;
  4.          * 当输入没有完成时,有可能发生输出错误,需要解决; 输入与输出需要加锁 进一步的,想要输入数值后,等待输出完毕才继续输入,
  5.          * 需要两个线程判断资源内是否有值,没有则输入然后等待,有则输出然后等待 两个线程间需要一个联系方式来互相通知
  6.          */
  7.         public static void main(String[] args) {
  8.                 Res r = new Res();
  9.                 InputDemo in = new InputDemo(r);
  10.                 OutputDemo out = new OutputDemo(r);
  11.                 Thread t1 = new Thread(in);
  12.                 Thread t2 = new Thread(out);
  13.                 t1.start();
  14.                 t2.start();
  15.         }

  16. }

  17. class Res {// 创建资源类
  18.         String name;
  19.         String sex;
  20.         boolean flag=false; // 默认为false,表示目前没有资源;
  21. }

  22. class InputDemo implements Runnable {
  23.         private Res r;

  24.         InputDemo(Res r) {// 需要操作的是资源对象
  25.                 this.r = r;
  26.         }

  27.         public void run() {// 操作方法,打印
  28.                 int x=0;
  29.                 while (true) {
  30.                         synchronized (r) {
  31.                                 if (r.flag) {
  32.                                         try {r.wait();} catch (InterruptedException e) {}
  33.                                         if (x==0) {
  34.                                                 r.name = "name";
  35.                                                 r.sex = "sex";
  36.                                         } else {
  37.                                                 r.name = "姓名";
  38.                                                 r.sex = "性别";
  39.                                         }
  40.                                         x=(x+1)%2;
  41.                                         r.flag = true;
  42.                                         r.notify();
  43.                                 }
  44.                         }
  45.                 }
  46.         }

  47. }

  48. class OutputDemo implements Runnable {

  49.         private Res r;

  50.         OutputDemo(Res r) {// 需要操作的是资源对象
  51.                 this.r = r;
  52.         }

  53.         public void run() {

  54.                 while (true) {
  55.                         synchronized (r) {
  56.                                 if (!r.flag) {
  57.                                         try {r.wait();} catch (InterruptedException e) {}
  58.                                         System.out.println(r.name + "---" + r.sex);
  59.                                         r.flag = false;
  60.                                         r.notify();
  61.                                 }
  62.                         }
  63.                 }
  64.         }

  65. }
复制代码




评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马