이 글은 주로 자바에서 생산자-소비자 문제의 방식을 예시로 분석한 것입니다. 필요한 친구들은 참고하면 됩니다.
생산자와 소비자 문제는 스레드 모델의 고전적인 문제인 생산자와 소비자입니다. 동일한 기간 동안 동일한 저장 공간을 공유하며, 생산자는 해당 공간에 데이터를 저장하고 소비자는 데이터를 검색하게 됩니다.
저장공간은 가득 차고, 생산자는 이를 점유하고, 생산자는 공간을 만들어 제품을 치우고, 소비자가 제품을 소비하기를 기다려 그 공간에 제품을 추가한다. 서로 기다리다가 교착 상태가 발생합니다.
다음 예는 스레드를 통해 생산자/소비자 문제를 해결하는 방법을 보여줍니다.
/* 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
[관련 권장 사항]
위 내용은 Java 생산자와 소비자의 예에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!