package cn.smallbug.thread;
/**
* 资源定义
*
* @timestamp Feb 13, 2016 11:55:10 PM
* @author smallbug
*/
class Resource {
private String name;
private int age = 0;
private boolean flag = false;
public synchronized void setShow(String name) {
while (flag)
try {
this.wait();
} catch (InterruptedException e) {
}
this.name = name + age++;
System.out.println("~~~~~~" + Thread.currentThread().getName() + "~~生产者~~~~" + this.name);
flag = true;
this.notifyAll();
}
/**
* 生产者
*
* @timestamp Feb 13, 2016 11:55:24 PM
*/
public synchronized void getShow() {
while (!flag)
try {
this.wait();
} catch (InterruptedException e) {
}
System.out.println("~~~消费者~~~" + Thread.currentThread().getName() + "~~~~~~" + this.name);
flag = false;
this.notifyAll();
}
}
/**
* 生产者
*
* @timestamp Feb 13, 2016 11:55:30 PM
* @author smallbug
*/
class Production implements Runnable {
private Resource r;
Production(Resource r) {
this.r = r;
}
@Override
public void run() {
while (true) {
r.setShow("小虫");
}
}
}
/**
* 消费者
*
* @timestamp Feb 14, 2016 12:17:29 AM
* @author smallbug
*/
class Consumer implements Runnable {
private Resource r;
Consumer(Resource r) {
this.r = r;
}
@Override
public void run() {
while (true) {
r.getShow();
}
}
}
public class WaitAwake {
public static void main(String[] args) {
Resource re = new Resource();
Production p = new Production(re);
Consumer c = new Consumer(re);
Thread t1 = new Thread(p);
Thread t2 = new Thread(c);
t1.start();
t2.start();
}
}
?
原文:http://smallbug-vip.iteye.com/blog/2276308