这个案例是生产者和消费这,还有店员,那么店员是介于生产者和消费中间人。他工作是吧钱结算清除,把产品卖给客户
class Productor implements Runnable{//开始第一步 private Clerk c1;//开始第3步,开始直接用声明变量的方式,声明Clerk,因为他是要共享的类。只是做了声明,但是里面是空的。啥东西都没有的。没有地址的。 public Productor(Clerk c1){//第4步同样,声明完毕后,要能接收,进行主程序开始调用的时候,进行方便接入。 this.c1=c1;//这里声明后,肯定要把它赋值,问题是从谁身上赋值呢?本身是一个类。所以要从外部进行赋值。 } @Override public void run() {//开始第一步 while(true){ System.out.println("生产商开始生产"); c1.addProduct();//开始第2步,难点这边如何去调用共享数据这个呢? } } } class Clerk{//开始第一步 private int produNum=0;//开始第2步 //属性的修改都是通过方法来做。!!!!!!!!!!!!!!!!!!! public Clerk() { } public int getProduNum() { return produNum; } public void setProduNum(int produNum) { this.produNum = produNum; } public synchronized void addProduct(){ if (produNum<20){ produNum++;//开始第2步 System.out.println(Thread.currentThread().getName()+"生产者增加到产品为"+produNum); this.notify(); }else if(produNum>=20){ try { wait(); } catch (InterruptedException e) { throw new RuntimeException(e); } } } public synchronized void minProduct(){ if (produNum<=0) { try { wait(); } catch (InterruptedException e) { throw new RuntimeException(e); } }else{ produNum--;//开始第2步 System.out.println(Thread.currentThread().getName()+"消费者吃掉产品为"+produNum); this.notify(); } } } class Customer implements Runnable{//开始第一步 private Clerk c1; public Customer(Clerk c1) { this.c1 = c1; } @Override public void run() {//开始第一步 while(true){//开始第2步 System.out.println("开始吃掉产品"); try { Thread.sleep(1000); } catch (InterruptedException e) { throw new RuntimeException(e); } c1.minProduct();//开始第2步 } } }
package com.sgg.Threadcommunication.exer1; public class produceandcomsusion { public static void main(String[] args) { Clerk c1=new Clerk(); Productor p=new Productor(c1); Customer c=new Customer(c1); Thread t1=new Thread(p); Thread tt1=new Thread(p); Thread tt2=new Thread(p); Thread tt3=new Thread(p); Thread tt21=new Thread(p); Thread tt31=new Thread(p); Thread t2=new Thread(c); t1.setName("我是生产者1"); t1.setName("我是生产者2"); tt2.setName("我是生产者3"); tt3.setName("我是生产者4"); tt21.setName("我是生产者31"); tt31.setName("我是生产者41"); t2.setName("我是消费者"); t1.start(); t2.start(); tt1.start(); tt2.start(); tt3.start(); tt21.start(); tt31.start(); } }
这是简单案例做分享