package com.what21.thread03;
public class ThreadCooperate {
/**
* @param args
*/
public static void main(String[] args) {
Bag bag = new Bag();
for(int i = 0; i < 100; i++) {
new Thread(new PutThread(bag)).start();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
new Thread(new GetThread(bag)).start();
}
}
}
package com.what21.thread03;
public class PutThread extends Thread {
private Bag bag;
public PutThread(Bag bag) {
this.bag = bag;
}
@Override
public void run() {
Object obj = new Object();
System.out.println("生产者: " + obj);
this.bag.put(obj);
}
}
package com.what21.thread03;
public class GetThread extends Thread {
private Bag bag;
public GetThread(Bag bag) {
this.bag = bag;
}
@Override
public void run() {
Object obj = this.bag.get();
System.out.println("消费者: " + obj);
}
}
package com.what21.thread03;
import java.util.ArrayList;
import java.util.List;
public class Bag {
private List objList = new ArrayList();
/**
* @return
*/
public synchronized Object get() {
while (objList.size() == 0) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Object obj = objList.get(0);
// 清空
objList.clear();
// 唤醒阻塞队列的某线程到就绪队列
notify();
return obj;
}
/**
* @param obj
*/
public synchronized void put(Object obj) {
while (objList.size() > 0) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 放入
objList.add(obj);
// 唤醒阻塞队列的某线程到就绪队列
notify();
}
}