자바 동시 제어 고전 장면-생산자/소비자
자바 병행 제어 네 가지 방법:
1.wait()/notify();
2. await() / signal() ;
3.BlockingQueue 대기 열 차단 방법;
4.PipedInputStream / PipedOutputStream
가장 많이 사용 되 는 것 은 wait()/notify()입 니 다.간단 한 demo 참조 코드:
창고 종류:
import java.util.LinkedList;
public class Storage {
public static final int MAX_SIZE = 100;
private LinkedList
생산자 종류:
public class Producer implements Runnable {
private int num;
private Storage storage;
public Producer(Storage storage){
this.storage = storage;
}
@Override
public void run() {
this.produce();
}
public void produce(){
this.storage.produce(this.num);
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public Storage getStorage() {
return storage;
}
public void setStorage(Storage storage) {
this.storage = storage;
}
}
소비자 클래스:
public class Consumer implements Runnable {
private int num;
private Storage storage;
public Consumer(Storage storage){
this.storage = storage;
}
@Override
public void run() {
this.consume();
}
private void consume(){
this.storage.consume(this.num);
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public Storage getStorage() {
return storage;
}
public void setStorage(Storage storage) {
this.storage = storage;
}
}
테스트 방법 클래스:
public class SysTest {
public static void main(String[] args) {
Storage storage = new Storage();
Producer pt1 = new Producer(storage);
pt1.setNum(10);
Producer pt2 = new Producer(storage);
pt2.setNum(10);
Producer pt3 = new Producer(storage);
pt3.setNum(10);
Producer pt4 = new Producer(storage);
pt4.setNum(10);
Producer pt5 = new Producer(storage);
pt5.setNum(10);
Producer pt6 = new Producer(storage);
pt6.setNum(10);
Producer pt7 = new Producer(storage);
pt7.setNum(80);
Thread p1 = new Thread(pt1);
Thread p2 = new Thread(pt2);
Thread p3 = new Thread(pt3);
Thread p4 = new Thread(pt4);
Thread p5 = new Thread(pt5);
Thread p6 = new Thread(pt6);
Thread p7 = new Thread(pt7);
Consumer ct1 = new Consumer(storage);
ct1.setNum(50);
Consumer ct2 = new Consumer(storage);
ct2.setNum(20);
Consumer ct3 = new Consumer(storage);
ct3.setNum(30);
Thread c1 = new Thread(ct1);
Thread c2 = new Thread(ct2);
Thread c3 = new Thread(ct3);
c1.start();
c2.start();
c3.start();
p1.start();
p2.start();
p3.start();
p4.start();
p5.start();
p6.start();
p7.start();
}
}
결과:
소비 할 제품 수량:50 재 고량:0 잠시 소비 임 무 를 수행 할 수 없습니다!소비 할 제품 수량:30 재 고량:0 잠시 소비 임 무 를 수행 할 수 없습니다!이미 생산 된 제품 수:10 재고 저장량:10 소비 할 제품 수량:30 재 고량:10 잠시 소비 임 무 를 수행 할 수 없습니다!소비 할 제품 수량:20 재 고량:10 당분간 소비 임 무 를 수행 할 수 없습니다!소비 할 제품 수량:50 재 고량:10 잠시 소비 임 무 를 수행 할 수 없습니다!이미 생산 된 제품 수:10 현 고 저장량 은:20 이미 생산 된 제품 수:10 현 고 저장량 은:30 이미 생산 된 제품 수:10 현 고 저장량 은:40 소비 할 제품 수량:50 재 고량:40 잠시 소비 임 무 를 수행 할 수 없습니다!이미 소비 제품 수:20 재고 저장량:20 소비 할 제품 수량:30 재 고량:20 잠시 소비 임 무 를 수행 할 수 없습니다!이미 생산 된 제품 수:10 재고 저장량:30 소비 할 제품 수량:50 재 고량:30 잠시 소비 임 무 를 수행 할 수 없습니다!생산 할 제품 수량:80 재 고량 30 잠시 생산 임 무 를 수행 할 수 없습니다 이미 소비 제품 수:30 재고 저장량:0 이미 생산 제품 수:10 재고 저장량:10 이미 생산 제품 수:80 재고 저장량:90 이미 소비 제품 수:50 재고 저장량:40
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.