zoukankan      html  css  js  c++  java
  • 多线程生产者与消费者

      1 //资源类 1.资源变量 2.生产方法 3.消费方法
      2 class Box{
      3     private int product=0;   //资源变量
      4    
      5     public  synchronized void addProduct(){
      6          
      7      //首先要判断盒子中产品是否大于10,大于就停止生产,否则就继续生产
      8      if(this.product >10){
      9          try{
     10               this.wait();
     11          }catch(InterruptedException e){
     12             e.printStackTrace();
     13          }
     14         
     15      }else{
     16 
     17          //打印生产了多少个产品
     18          System.out.println("这是生产的第" + this.product + "个产品");
     19          this.product++;
     20 
     21          //需要唤醒消费者线程开始消费
     22          this.notifyAll();
     23      }
     24     
     25     }
     26 
     27      public  synchronized void getProduct(){
     28          
     29      //首先要判断盒子中产品是否小0,小于就停止消费,否则就继续消费
     30      if(this.product <= 0){
     31          try{
     32               this.wait();
     33          }catch(InterruptedException e){
     34             e.printStackTrace();
     35          }
     36         
     37      }else{
     38 
     39          //打印消费了多少个产品
     40          System.out.println("这是消费的第" + this.product + "个产品");
     41          this.product--;
     42 
     43          //需要唤醒生产者线程开始消费
     44          this.notifyAll();
     45      }
     46     
     47     }
     48      
     49 }
     50 
     51 //生产者调用addProducter方法
     52 class Producter implements Runnable
     53 {
     54     //资源对象的引用
     55     Box box;
     56     public Producter(Box box){
     57        this.box = box;
     58     }
     59      
     60     public void run(){
     61        System.out.println("生产者开始生产了");
     62        while(true){
     63           try{
     64                Thread.sleep((int) Math.random()*10000);
     65           }
     66           catch(InterruptedException e)
     67            {
     68               e.printStackTrace();
     69            }
     70          
     71           box.addProduct();
     72        }
     73        
     74     }
     75 
     76 }
     77 
     78 //消费者调用getProduct方法
     79 class Consumer implements Runnable
     80 {
     81     //资源对象的引用
     82     Box box;
     83     public Consumer(Box box){
     84        this.box = box;
     85     }
     86      
     87     public void run(){
     88        System.out.println("消费者开始消费了");
     89        while(true){
     90           try{
     91                Thread.sleep((int) Math.random()*10000);
     92           }
     93           catch(InterruptedException e)
     94            {
     95               e.printStackTrace();
     96            }
     97          
     98           box.getProduct();
     99        }
    100        
    101     }
    102 }
    103 
    104 public class ThreadDemo{
    105 
    106 //程序测试入口
    107 public static void main(String[] args){
    108 
    109   Box box = new Box();
    110 
    111   Producter pd = new Producter(box);
    112   Consumer cn = new Consumer(box);
    113 
    114   new Thread(pd).start();
    115   new Thread(cn).start();
    116 
    117   }
    118 }
  • 相关阅读:
    ASP.NET MVC路由模块
    线程安全的单例模式
    MVC自带表单效验
    MSsql 中 in 语法排序的说明
    Web.Config配置错误页面处理
    WCF基本应用
    .NET微信自定义分享标题、缩略图、超链接及描述的设置方法
    .NET微信通过授权获取用户的基本信息
    C#中获取服务器IP,客户端IP以及网卡物理地址
    .NET获取客户端、服务器端的信息
  • 原文地址:https://www.cnblogs.com/yiliweichinasoft/p/3043760.html
Copyright © 2011-2022 走看看