生产者消费者模型
2021-12-27 本文已影响0人
圣明
基于Synchronized实现
package com.wan.situ;
import java.util.ArrayList;
public class ThreadTest {
public int maxSize;
public final ArrayList<String> products = new ArrayList<>();
public Worker worker;
public Consumer consumer;
public boolean isRun = false;
private static int index;
public synchronized String getNewIndex() {
return (index++) + "";
}
public ThreadTest(int size) {
this.maxSize = size;
this.worker = new Worker();
this.consumer = new Consumer();
}
public void start() {
this.isRun = true;
this.consumer.start();
this.worker.start();
}
class Worker extends Thread {
@Override
public void run() {
while (isRun) {
synchronized (products) {
if (products.size() < maxSize) {
try {
Thread.sleep(1000);
String p = getNewIndex();
products.add(p);
System.out.println("生产者 + " + p);
products.notify();
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
try {
System.out.println("生产者 - wait");
products.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
class Consumer extends Thread {
@Override
public void run() {
while (isRun) {
synchronized (products) {
if (products.size() > 0) {
try {
Thread.sleep(1000);
System.out.println("消费者 - " + products.remove(0));
products.notify();
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
try {
System.out.println("消费者 - wait");
products.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
public static void main(String[] args) {
new ThreadTest(10).start();
}
}
消费者 - wait
生产者 + 0
生产者 + 1
生产者 + 2
生产者 + 3
生产者 + 4
生产者 + 5
生产者 + 6
生产者 + 7
生产者 + 8
生产者 + 9
生产者 - wait
消费者 - 0
消费者 - 1
消费者 - 2
消费者 - 3
消费者 - 4
消费者 - 5
消费者 - 6
消费者 - 7