packagecom.ThreadPool;importjava.util.LinkedList;/*** 2019-1-8
*@authorAdministrator
**/
public classLock {public static voidmain(String[] args) {
producerAndConsume producerAndConsume=newproducerAndConsume();new Thread(newProducer(producerAndConsume)).start();new Thread(newConsume(producerAndConsume)).start();
}
}/*** 生产线程
*
*@authorAdministrator
**/
class Producer implementsRunnable {
producerAndConsume producerconsumenull;publicProducer(producerAndConsume producerconsume) {this.producerconsumenull =producerconsume;
}public voidrun() {while (true) {
producerconsumenull.producer();try{
Thread.sleep(1000);
}catch(InterruptedException e) {
}
}
}
}/*** 消耗线程
*@authorAdministrator
**/
class Consume implementsRunnable {
producerAndConsume producerconsumenull;publicConsume(producerAndConsume producerconsume) {this.producerconsumenull =producerconsume;
}public voidrun() {while (true) {
producerconsumenull.consume();
}
}
}/*** 模拟生产与消费,生产数量等于消费数量,生产完直接消费,消费完直接生产,循环。。。。。
*
*@authorAdministrator
**/
class producerAndConsume implementsProducerAndConsumeInterface {
LinkedList list = new LinkedList();private static final Object lock = newObject();int maxSize = 100;public voidproducer() {synchronized(lock) {while (list.size() >=maxSize) {try{
System.err.println("等待消费!不可以生产!");
lock.wait();//生产线程等待中
} catch(InterruptedException e) {
}
}
System.err.println("正在生产中.....");for (int i = list.size(); i < maxSize; i++) {
list.add(i);
}try{
Thread.sleep(5000);//等待五秒,模拟生产时间
} catch(InterruptedException e) {
}
System.err.println("生产完毕!总共"+list.size()+"件商品");
lock.notifyAll();//释放锁资源,唤醒消费线程
}
}public voidconsume() {synchronized(lock) {while (list.size()
System.out.println("等待消费中!!!");
lock.wait();
}catch(InterruptedException e) {
}
}int size=list.size();
System.out.println("消费中......");try{
Thread.sleep(5000);//模拟消费时间
} catch(InterruptedException e) {
}
list.clear();
System.out.println("消费完毕!总共消耗了"+size+"件商品");
lock.notifyAll();//释放锁资源
}
}
}interfaceProducerAndConsumeInterface {voidproducer();voidconsume();
}