zoukankan      html  css  js  c++  java
  • Java 多线程 简单实例 (消费者与生成者)的关系

    PS::线程这套东西在PHP里完全是不存在的概念,有待进一步的学习;

    PS::这个实例是根据书本上的知识进行扩展的,理解程度50%左右吧!

    1.定义生产消费环境

    package second;
    
    public class Queue {
        int value = 0;
        boolean isEmpty = true;
        /**
         * 生产者
         * @param v
         */
        public synchronized void put(int v){
            if(!isEmpty){//如果存在数据没有被消费
                try{
                    System.out.println("生产者等待...");
                    wait();
                }catch(Exception e){
                    
                }
            }
            value ++;//本次生产1个
            isEmpty = false;//设置为false(代表有东西了可以消费了)
            System.out.println("生产者共生产数量:" + v);
            notify();//通知消费者开始消费
        }
        
        public synchronized int get(){
            //如果消费数据没有了,消费者继续等...
            if(isEmpty){
                try{
                    System.out.println("消费者等待...");
                    wait();
                }catch(Exception e){
                    
                }
            }
            value --;
            if(value < 1){
                isEmpty = true;//如果消费完了,则设置为true
            }
            System.out.println("消费者消费一个,剩余:"+value);
            notify();
            return value;
        }
    }

    2.生产者

    package second;
    
    public class Producer extends Thread {
        Queue q;
        Producer(Queue q){
            this.q = q;
        }
        public void run(){
            for(int i=1;i<5;i++){//循环生产5次
                q.put(i);
            }
        }
    }

    3.消费者

    package second;
    
    public class Consumer extends Thread {
        Queue q;
        Consumer(Queue q){
            this.q = q;
        }
        public void run(){
            while(true){//永远的消费下去,直到不再生产为止
                q.get();
            }
        }
    }

    4.线程调用

    package second;
    
    public class Cao {
        public static void main(String[] args){
            Queue q = new Queue();//实例消费&生成工厂
            Producer p = new Producer(q);//将工厂传入给生产者
            Consumer c = new Consumer(q);//将工厂传入给消费者
            p.start();//开启生成线程
            c.start();//开启消费线程
        }
    }
  • 相关阅读:
    JQ分页练习
    Dom1
    JQ轮播图
    Dom操作
    DYR
    jQ点击事件
    [z]vc boost安装
    [z] .net与java建立WebService再互相调用
    [z]
    git常用命令二
  • 原文地址:https://www.cnblogs.com/shibazi/p/3844761.html
Copyright © 2011-2022 走看看