> Java > java지도 시간 > 본문

Java 생산자와 소비자의 예에 대한 자세한 설명

Y2J
풀어 주다: 2017-05-06 13:22:53
원래의
1733명이 탐색했습니다.

이 글은 주로 자바에서 생산자-소비자 문제의 방식을 예시로 분석한 것입니다. 필요한 친구들은 참고하면 됩니다.

생산자와 소비자 문제는 스레드 모델의 고전적인 문제인 생산자와 소비자입니다. 동일한 기간 동안 동일한 저장 공간을 공유하며, 생산자는 해당 공간에 데이터를 저장하고 소비자는 데이터를 검색하게 됩니다.

저장공간은 가득 차고, 생산자는 이를 점유하고, 생산자는 공간을 만들어 제품을 치우고, 소비자가 제품을 소비하기를 기다려 그 공간에 제품을 추가한다. 서로 기다리다가 교착 상태가 발생합니다.


다음 예는 스레드를 통해 생산자/소비자 문제를 해결하는 방법을 보여줍니다.

/*
 author by w3cschool.cc
 ProducerConsumerTest.java
 */
public class ProducerConsumerTest {
  public static void main(String[] args) {
   CubbyHole c = new CubbyHole();
   Producer p1 = new Producer(c, 1);
   Consumer c1 = new Consumer(c, 1);
   p1.start(); 
   c1.start();
  }
}
class CubbyHole {
  private int contents;
  private boolean available = false;
  public synchronized int get() {
   while (available == false) {
     try {
      wait();
     }
     catch (InterruptedException e) {
     }
   }
   available = false;
   notifyAll();
   return contents;
  }
  public synchronized void put(int value) {
   while (available == true) {
     try {
      wait();
     }
     catch (InterruptedException e) { 
     } 
   }
   contents = value;
   available = true;
   notifyAll();
  }
}
class Consumer extends Thread {
  private CubbyHole cubbyhole;
  private int number;
  public Consumer(CubbyHole c, int number) {
   cubbyhole = c;
   this.number = number;
  }
  public void run() {
   int value = 0;
     for (int i = 0; i < 10; i++) {
      value = cubbyhole.get();
      System.out.println("消费者 #" + this.number+ " got: " + value);
     }
  }
}
class Producer extends Thread {
  private CubbyHole cubbyhole;
  private int number;
  public Producer(CubbyHole c, int number) {
   cubbyhole = c;
   this.number = number;
  }
  public void run() {
   for (int i = 0; i < 10; i++) {
     cubbyhole.put(i);
     System.out.println("生产者 #" + this.number + " put: " + i);
     try {
      sleep((int)(Math.random() * 100));
     } catch (InterruptedException e) { }
   }
  }
}
로그인 후 복사

위 코드를 실행한 결과는 다음과 같습니다.

消费者 #1 got: 0
生产者 #1 put: 0
生产者 #1 put: 1
消费者 #1 got: 1
生产者 #1 put: 2
消费者 #1 got: 2
生产者 #1 put: 3
消费者 #1 got: 3
生产者 #1 put: 4
消费者 #1 got: 4
生产者 #1 put: 5
消费者 #1 got: 5
生产者 #1 put: 6
消费者 #1 got: 6
生产者 #1 put: 7
消费者 #1 got: 7
生产者 #1 put: 8
消费者 #1 got: 8
生产者 #1 put: 9
消费者 #1 got: 9
로그인 후 복사

[관련 권장 사항]

1. Java 무료 동영상 튜토리얼

2. Geek Academy Java 동영상 튜토리얼

3. FastJson 개발 튜토리얼

위 내용은 Java 생산자와 소비자의 예에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!