黑马程序员技术交流社区

标题: 能帮我看下这个程序出错在哪了么? [打印本页]

作者: sven556677    时间: 2015-8-19 11:34
标题: 能帮我看下这个程序出错在哪了么?
多线程的单个生产者/消费者
  1. package com.cn.test;
  2. class Person{
  3.         private String name;
  4.         private String gender;
  5.         private boolean flag=false;
  6.         public synchronized void set(String name,String gender){
  7.                 if(flag){try{this.wait();}catch(InterruptedException e){e.printStackTrace();}
  8.                 this.name=name;this.gender=gender;
  9.                 flag=true;
  10.                 this.notifyAll();
  11.                 }
  12.         }
  13.         public synchronized void get(){
  14.                 if(!flag){try{this.wait();}catch(InterruptedException e){e.printStackTrace();}
  15.                 System.out.println("姓名"+this.name+"性别"+this.gender);
  16.                 flag=false;
  17.                 this.notifyAll();
  18.                 }
  19.         }
  20. }
  21. class Input implements Runnable{
  22.         Person p;
  23.         Input(Person p){this.p=p;}
  24.         public void run() {
  25.                 int x=0;//-------------------循环存
  26.                 while(true){
  27.                         if(x==0){
  28.                                 p.set("zhangsan", "nan");
  29.                         }
  30.                         else p.set("XIAOHONG", "NV");
  31.                         x=(x+1)%2;
  32.                 }
  33.         }
  34. }
  35. class Output implements Runnable{
  36.         Person p;
  37.         Output(Person p){this.p=p;}
  38.         public void run() {
  39.                 while(true){
  40.                         p.get();
  41.                 }
  42.         }
  43. }
  44. public class MutilpDemo {
  45.         public static void main(String[] args) {
  46.                 Person p=new Person();
  47.                 Input in=new Input(p);
  48.                 Output out=new Output(p);
  49.                 Thread t1=new Thread(in);
  50.                 Thread t2=new Thread(out);
  51.                 t1.start();
  52.                 t2.start();
  53.         }
  54. }
复制代码

作者: sven556677    时间: 2015-8-19 11:52
搞好了,if里面的try catch大括号打错了
作者: l_15562009298    时间: 2015-8-19 12:53
仔细对比一下
作者: l_15562009298    时间: 2015-8-19 12:59
public synchronized void set(String name,String gender){
            if(!flag){
            this.name=name;this.gender=gender;
            flag=true;
            this.notify();
            try{this.wait();}catch(InterruptedException e){e.printStackTrace();}
            }
    }
    public synchronized void get(){
            if(flag){
            System.out.println("姓名"+this.name+"性别"+this.gender);
            flag=false;
            this.notify();
            try{this.wait();}catch(InterruptedException e){e.printStackTrace();}
            }
    }






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