/**
* 生产者线程,消费者线程
* 共享数据:店员&产品
* 涉及线程通信
* 同步机制
*
* @author 한양양
* @create 2019-11-12-17:13
*/
//店员
class Clerk{
private static int num=0;//静态全局变量
//允许上货
public synchronized void save(){
notify();
if (num==20){
try {
System.out.println(Thread.currentThread().getName()+":没有货架等待中...");
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}else {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
num=num+1;
System.out.println(Thread.currentThread().getName()+":上货;当前货物数"+num);
}
}
public synchronized void del() {
notify();
if (num<=0){
try {
System.out.println(Thread.currentThread().getName()+":没有存货等待中...");
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}else{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
num=num-1;
System.out.println(Thread.currentThread().getName()+":取货;当前货物数"+num);
}
}
}
//生产者
class Productor extends Thread{
private Clerk clerk;
public Productor(Clerk clerk){
this.clerk=clerk;
}
public void save(String name){
Thread thread=new Thread(new Runnable() {
@Override
public void run() {
while (true) {
clerk.save();
}
}
});
thread.setName(name);
thread.start();
}
}
//消费者
class Customert extends Thread{
private Clerk clerk;
public Customert(Clerk clerk){
this.clerk=clerk;
}
public void delt(){
Thread thread=new Thread(new Runnable() {
@Override
public void run() {
while (true) {
clerk.del();
}
}
});
thread.setName("消费者");
thread.start();
}
}
public class ProductTest {
public static void main(String[] args) {
Clerk clerk=new Clerk();
Productor productor=new Productor(clerk);
productor.save("生产者1");
productor.save("生产者2");
Customert customert=new Customert(clerk);
customert.delt();
}
}
结果如下: