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
  • 相关阅读:
    ElasticSearch7.6学习使用及问题总结
    phpstorm2020.1破解及使用
    大规模网站开发技术
    备份数据库、恢复数据库、定时
    Centos7系统tmp目录下文件默认保留时长
    linux删除指定文件夹中某个文件除外的其他文件
    python resource模块使用
    python logging 日志轮转文件不删除问题的解决方法
    linux 常用命令快捷键
    shell学习笔记(4)
  • 原文地址:https://www.cnblogs.com/xiarongjin/p/8309044.html
Copyright © 2011-2022 走看看