首页 > 编程语言 > 详细

Java多线程消费者、生产者的基本思路

时间:2019-02-12 15:17:47      阅读:161      评论:0      收藏:0      [点我收藏+]

 

 多线程主要考察的就是 线程的同步控制   生产者消费者的思路就是,当 一个线程执行时让另一个线程 挂起就行了

 ThreadOne、ThreadTwo同时运行,添加一个变量在一个公共类(下边的Function类)中,

          例如:当变量为true,ThreadOne执行ThreadTwo挂起;

                     当变量为false,ThreadOne挂起ThreadTwo执行

  一个线程执行完之后,自己重置变量(目的是把自己挂起),然后唤醒另一个挂起的线程,如此便可使两个线程交替执行

          对于消费者、生产者来说:

                     当消费者拿不到东西的时候就把自己挂起,并且唤醒生产者就可以了

                     当生产者生产完东西的时候就把自己挂起,并且唤醒消费者就可以了

 

//这是一个共享的类,主线程和子线程共用
    class Function{
        private boolean flag=false;
        //子线程要实现的功能
        public synchronized void sub(){
            while(flag){  //此处用while循环而不是用if语句判断是为了防止 线程的假唤醒
                try {
                    this.wait(); //此处的this指的是当前执行此段代码的线程
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

            for(int i=0;i<10;i++){
                //for循环内定义子线程的功能,这里简单的假设为打印一句话,主线程同理
                System.out.println("sub"+i);
            }

            flag=true;
            this.notify();
        }
        //主线程要实现的功能
        public synchronized void main(){
            while(!flag){ //此处用while循环是为了 防止线程的假唤醒
                try {
                    this.wait(); //此处this指的是当前执行此段代码的线程
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            for(int i=0;i<10;i++){
                System.out.println("main"+i);
            }

            flag=false;
            this.notify();
        }

    }

    public class Demo01 {

        public static void main(String[] args) {
            final Function f=new Function();
            new Thread(
                    new Runnable(){

                        @Override
                        public void run() {
                            for(int i=0;i<50;i++){
                                f.sub();
                            }
                        }

                    }
            ).start();

            for(int i=0;i<50;i++){
                f.main();
            }
        }
    }

 

Java多线程消费者、生产者的基本思路

原文:https://www.cnblogs.com/bimingcong/p/10365192.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!