package html;
import java.util.LinkedList;
import java.util.List;
public class KF {
public static void main(String[] args) {
BlockList list = new BlockList(10);
new Thread(new Productor(list)).start();
new Thread(new Consumer(list)).start();
}
static class Productor implements Runnable {
BlockList list;
public Productor(BlockList list) {
this.list = list;
}
@Override
public void run() {
int i = 0;
while (true) {
System.err.println("put:" + i);
list.put(i++);
}
}
}
static class Consumer implements Runnable {
BlockList list;
public Consumer(BlockList list) {
this.list = list;
}
@Override
public void run() {
while (true) {
Object obj = list.get();
System.err.println("get:" + obj);
}
}
}
}
class BlockList {
List<Object> list;
int capacity;
public BlockList(int capacity) {
this.capacity = capacity;
list = new LinkedList<>();
}
public boolean put(Object obj) {
synchronized (list) {
while (list.size() >= capacity) {
try {
list.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
list.add(obj);
list.notifyAll();
}
return false;
}
public Object get() {
Object obj = null;
synchronized (list) {
while (list.isEmpty()) {
try {
list.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
obj = list.remove(0);
list.notifyAll();
}
return obj;
}
}