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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

多线程的单个生产者/消费者
  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. }
复制代码

3 个回复

倒序浏览
搞好了,if里面的try catch大括号打错了
回复 使用道具 举报
仔细对比一下
回复 使用道具 举报
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();}
            }
    }

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马