zoukankan      html  css  js  c++  java
  • Java 单生产者消费者问题

    package com.cwcec.test;
    
    class Resource
    {
        private int count = 0;
        private boolean flag = false;
        
        public synchronized void set(int count)
        {
            if(flag)
            {
                try {
                    this.wait();
                } catch (InterruptedException e) {
                    // TODO 自动生成的 catch 块
                    e.printStackTrace();
                }
            }
            this.count = count;
            flag = true;
            System.out.println(Thread.currentThread().getName() + "...生产者..." + count);
            this.notify();
        }
        
        public synchronized void out()
        {
            if(!flag)
            {
                try {
                    this.wait();
                } catch (InterruptedException e) {
                    // TODO 自动生成的 catch 块
                    e.printStackTrace();
                }
            }
            System.out.println(Thread.currentThread().getName() + "...消费者..." + count);
            flag = false;
            this.notify();
        }
        
    }
    
    class Producer implements Runnable
    {
        private Resource r;
        public Producer(Resource r)
        {
            this.r = r;
        }
        
        public void run()
        {
            int x = 0;
            while(true)
            {
                r.set( ++x);    
            }
        }
    }
    
    class Customer implements Runnable
    {
        Resource r;
        public Customer(Resource r)
        {
            this.r = r;
            
        }
        
        public void run()
        {
            while(true)
            {
                r.out();
            }
        }
    }
    
    public class Person {
    
        public static void main(String[] args) {
            // TODO 自动生成的方法存根
            Resource r = new Resource();
            Producer p = new Producer(r);
            Customer c = new Customer(r);
            
            Thread t1 = new Thread(p);
            Thread t2 = new Thread(c);
            
            t1.start();
            t2.start();
        }
    }
    Output
    Thread-0...生产者...61498
    Thread-1...消费者...61498
    Thread-0...生产者...61499
    Thread-1...消费者...61499
    Thread-0...生产者...61500
    Thread-1...消费者...61500
    Thread-0...生产者...61501
    Thread-1...消费者...61501
    Thread-0...生产者...61502
    Thread-1...消费者...61502
    Thread-0...生产者...61503
    Thread-1...消费者...61503
  • 相关阅读:
    「Luogu」2831愤怒的小鸟 (DFS+dp)
    LeetCode习题集
    递归的时间复杂度你真的懂吗?不是所有的二分递归都是logn级别
    [数据结构篇]谈一谈优先队列吧!
    论文爱好者(我不是)的福利
    Python 读微博留言进行情感分析(文本分类)
    python 多进程中的p.apply_async()
    记录本科论文开题报告修改过程
    KMP字符串匹配算法
    Pandas Timedelta
  • 原文地址:https://www.cnblogs.com/xiarongjin/p/8309044.html
Copyright © 2011-2022 走看看