zoukankan      html  css  js  c++  java
  • 多线程实例01--包子买卖

    1.创建一个实体类

     1 package Th05;
     2 
     3 public class Baozi5 {
     4 
     5     int id ;
     6 
     7     Baozi5 (int id){
     8         this.id = id;
     9     }
    10     
    11     public String toString(){
    12         return "包子:" + id;
    13     }
    14 }

    2.创建工厂

     1 package Th05;
     2 
     3 public class Factory5 {
     4 
     5     Baozi5[] num = new Baozi5[10];
     6     int index = 0;
     7 
     8     public synchronized void addBaozi(Baozi5 m){
     9 
    10         try {
    11             while( index == num.length){
    12                 System.out.println("_______________生产满咯_____________");
    13                 this.wait();
    14             }
    15             this.notify();
    16         }catch (InterruptedException e) {
    17             e.printStackTrace();
    18         }
    19         num[index] = m;
    20         index++;
    21         System.out.println("生产了"+ m + "共" + index + "个包子");
    22     }
    23     
    24     public synchronized Baozi5 popBaozi(){
    25         try{
    26             while(index == 0) {
    27                 System.out.println("_____________卖光咯_____________");
    28                 this.wait();
    29             }
    30             this.notify();
    31         }catch(Exception e){
    32             e.printStackTrace();
    33         }
    34         index--;
    35         System.out.println("消费了"+ num[index] +"共"+ index +"个包子");
    36         return num[index];
    37     }
    38 
    39     
    40 }

    3.买包子

     1 package Th05;
     2 
     3 public class Procuder5 implements Runnable{
     4 
     5     Factory5 fa = new Factory5();
     6     
     7     Procuder5 (Factory5 fa){
     8         this.fa = fa;
     9     }
    10 
    11     public void run() {
    12         for(int i=0; i<10; i++){
    13             Baozi5 b = new Baozi5(i);
    14             fa.addBaozi(b);
    15             try {
    16                 Thread.sleep((int) (Math.random() * 500));
    17             } catch (InterruptedException e) {
    18                 e.printStackTrace();
    19             }
    20         }
    21         
    22     }
    23     
    24     
    25 }

    4.卖包子

     1 package Th05;
     2 
     3 public class Customer5 implements Runnable{
     4 
     5     Factory5 fa = new Factory5();
     6     
     7     Customer5(Factory5 fa){
     8         this.fa = fa;
     9     }
    10 
    11     public void run() {
    12         for(int i=0; i<20; i++){
    13             Baozi5 b = fa.popBaozi();
    14             
    15             try {
    16                 Thread.sleep((int) (Math.random() * 1000));
    17             } catch (InterruptedException e) {
    18                 e.printStackTrace();
    19             }
    20         }
    21     }
    22 
    23 
    24 }

    5.测试

     1 package Th05;
     2 
     3 public class Test {
     4 
     5     public static void main(String[] args){
     6         Factory5 f = new Factory5();
     7         Procuder5 p = new Procuder5(f);
     8         Customer5 c = new Customer5(f);
     9         
    10         Thread t1 = new Thread(p);
    11         Thread t2 = new Thread(c);
    12 
    13         t1.start();
    14         t2.start();
    15     }
    16 }
  • 相关阅读:
    iview正在加载和关闭加载
    vue实现input输入框只能输入中文
    vue添加遮罩
    JSONP的实现原理
    vue-resource 实现 get, post, jsonp请求
    vue实例的生命周期
    IDE更新索引
    org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 19
    springmvc过滤的静态资源不起作用
    mybatis返回集合类型为map时
  • 原文地址:https://www.cnblogs.com/cfb513142804/p/4208955.html
Copyright © 2011-2022 走看看