java生产这消费者问题.
固定大小的缓存容器, 有一个生产者和三个消费者:
[java] view plaincopy在CODE上查看代码片派生到我的代码片
import java.util.LinkedList;
[java] view plaincopy在CODE上查看代码片派生到我的代码片
class Customer implements Runnable{
Buffer buffer;
public Customer(Buffer b){
buffer = b;
}
@Override
public void run() {
while(true){
int tmp = buffer.get();
System.out.println(this.toString() + “: custom ” + tmp);
}
}
}
class Producter implements Runnable{
Buffer buffer;
int count = 0;
public Producter(Buffer b){
buffer = b;
}
@Override
public void run() {
while(true){
System.out.println(this.toString()+”: product “+count);
buffer.put(count++);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public class Buffer{
LinkedList<Integer> buffer = new LinkedList<Integer>();
int size;
public Buffer(int s){
size = s;
}
public synchronized void put(int i) {
while(buffer.size()==size){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
size++;
buffer.add(i);
notifyAll();
}
public synchronized int get(){
while(buffer.size()==0){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
size–;
int tmp = buffer.removeFirst();
notifyAll();
return tmp;
}
public static void main(String [] args){
Buffer buffer = new Buffer(10);
Thread producter = new Thread(new Producter(buffer));
producter.start();
for(int i=0; i<3; i++){
Thread customer = new Thread(new Customer(buffer));
customer.start();
}
}
}