스레드 베이스(3)
2282 단어 thread
package org.wp.thread;
public class ProducerConsumer {
public static void main(String args[]) {
SyncStack ss = new SyncStack();
Producer prod = new Producer(ss);
Consumer cons = new Consumer(ss);
new Thread(cons).start();
new Thread(prod).start();
}
}
class Vinegar {
Integer id;
Vinegar(Integer id) {
this.id = id;
}
@Override
public String toString() {
return "Vinegar:" + id;
}
}
class SyncStack {
Integer index = 0;
Vinegar[] arrVinegar = new Vinegar[6];
public synchronized void produce(Vinegar vin) {
while (index == arrVinegar.length) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.notify();
arrVinegar[index] = vin;
System.out.println(" :" + vin);
index++;
}
public synchronized void consume() {
while (index == 0) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.notify();
index--;
System.out.println(" :" + arrVinegar[index]);
}
}
class Producer implements Runnable {
SyncStack ss = null;
Producer(SyncStack ss) {
this.ss = ss;
}
@Override
public void run() {
for (int i = 0; i < 20; i++) {
Vinegar vin = new Vinegar(i);
ss.produce(vin);
try {
Thread.sleep((int) (Math.random() * 100));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Consumer implements Runnable {
SyncStack ss = null;
Consumer(SyncStack ss) {
this.ss = ss;
}
@Override
public void run() {
for (int i = 0; i < 20; i++) {
ss.consume();
try {
Thread.sleep((int) (Math.random() * 1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Exception in thread main java.lang. NoClassDefFoundError 오류 해결 방법즉,/home/hadoop/jarfile) 시스템은 Hello World 패키지 아래의class라는 클래스 파일을 실행하고 있다고 오인하여 시스템의 CLASSPATH 아래 (일반적으로 현재 디렉터리를 포함) Hell...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.