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 }
  • 相关阅读:
    android开发之重写Application类
    android开发之Parcelable使用详解
    android开发之Bundle使用
    android开发之gridlayout使用入门
    android开发之merge结合include优化布局
    android开发布局优化之ViewStub
    android开发之PreferenceScreen使用详解
    android开发之使用Messenger实现service与activity交互
    LeetCode All in One 题目讲解汇总(持续更新中...)
    JavaWeb知识点总结
  • 原文地址:https://www.cnblogs.com/cfb513142804/p/4208955.html
Copyright © 2011-2022 走看看