자바 는 두 개의 스 레 드 시 뮬 레이 션 대 화 를 만 들 고 출력 을 교체 하여 분석 합 니 다.

수요 설명

실현 방식
네,이것 은 전형 적 인 소비자 와 생산자 의 문제 로 볼 수 있 습 니 다.코드 설명 을 자세히 보 세 요.
코드 내용
소비자,생산자 가 발생 하 는 정 보 를 가 져 가 는 것 을 책임 집 니 다.

/**
 * @auther::9527
 * @Description:    
 * @program:    
 * @create: 2019-08-10 10:45
 */
public class Consumer extends Thread{
  private MiddleMan mid = null;


  public Consumer() {
  }

  public Consumer(MiddleMan movie) {
    this.mid = movie;
  }

  @Override
  public void run() {
    //    50     
    for (int i = 0; i <1000 ; i++) {
      try {
        Thread.sleep(100);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      this.mid.get();
    }
  }
}
생산자

/**
 * @auther::9527
 * @Description:
 * @program:    
 * @create: 2019-08-10 10:39
 */
public class Producer implements Runnable{
  //    
  private MiddleMan mid = null;
  private boolean flag = false;

  public Producer(MiddleMan movie) {
    this.mid = movie;
  }

  public Producer() {
  }

  @Override
  public void run() {
    //    ,        
    for (int i = 0; i <1000; i++) {
      if (flag){
        this.mid.set("jack :","     ");
        flag = false;
      } else {
        this.mid.set("rose :","    ?");
        flag = true;
      }
    }
  }
}
정보 중계 장 소 는 생산 과 소비의 리듬 을 통제 하 는 것 을 책임 진다.

package com.duo;

/**
 * @auther::9527
 * @Description:        
 * @program:    
 * @create: 2019-08-10 10:36
 */
public class MiddleMan {
  private String name;
  private String info;
  private boolean flag = true; //     ,       ,     

  public String getName() {
    return name;
  }

  public String getInfo() {
    return info;
  }

  public MiddleMan(String name, String info) {
    this.name = name;
    this.info = info;
  }

  public MiddleMan() {
  }

  public synchronized void set(String name,String info){
    if (!flag){
      try {
        super.wait();  //      
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
      this.name = name;
    try {
      Thread.sleep(100);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
      this.info = info;
    flag = false;  //     ,      
    super.notify(); //  Object notify  ,         
  }
  public synchronized void get(){
    if (flag){
      try {
        super.wait();
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
    System.out.println(this.getName()+"-"+this.getInfo());
    flag = true;
    super.notify(); //    
  }
}
프로그램 입구

/**
 * @auther::9527
 * @Description:    
 * @program:    
 * @create: 2019-08-10 11:47
 */
public class Test {
  public static void main(String[] args) {
    //  ===>>            
    MiddleMan mid = new MiddleMan();
    Thread producer = new Thread(new Producer(mid));
    Thread consumer = new Thread(new Consumer(mid));
    producer.start();
    consumer.start();
  }
}
실행 결과

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기