千家信息网

java实现生产者消费者的实例代码

发表于:2025-01-27 作者:千家信息网编辑
千家信息网最后更新 2025年01月27日,这篇文章主要介绍"java实现生产者消费者的实例代码",在日常操作中,相信很多人在java实现生产者消费者的实例代码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"jav
千家信息网最后更新 2025年01月27日java实现生产者消费者的实例代码

这篇文章主要介绍"java实现生产者消费者的实例代码",在日常操作中,相信很多人在java实现生产者消费者的实例代码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"java实现生产者消费者的实例代码"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!


if只会判断一次,而while一直会判断

永远要使用notifyAll不要使用notify。

public class MyContainer1 {        final private LinkedList lists = new LinkedList<>();        final private int MAX = 10; //最多10个元素        private int count = 0;      //当前有多少个                        public synchronized void put(T t) {                while(lists.size() == MAX) { //想想为什么用while而不是用if?                        try {                                this.wait(); //effective java                        } catch (InterruptedException e) {                                e.printStackTrace();                        }                }                                lists.add(t);                ++count;                this.notifyAll(); //通知消费者线程进行消费        }                public synchronized T get() {                T t = null;                while(lists.size() == 0) {                        try {                                this.wait();    //effective java                        } catch (InterruptedException e) {                                e.printStackTrace();                        }                }                t = lists.removeFirst();                count --;                this.notifyAll(); //通知生产者进行生产                return t;        }                public static void main(String[] args) {                MyContainer1 c = new MyContainer1<>();                //启动消费者线程                for(int i=0; i<10; i++) {                        new Thread(()->{                                for(int j=0; j<5; j++) System.out.println(c.get());                        }, "c" + i).start();                }                                try {                        TimeUnit.SECONDS.sleep(2);                } catch (InterruptedException e) {                        e.printStackTrace();                }                                //启动生产者线程                for(int i=0; i<2; i++) {                        new Thread(()->{                                for(int j=0; j<25; j++) c.put(Thread.currentThread().getName() + " " + j);                        }, "p" + i).start();                }        }}

到此,关于"java实现生产者消费者的实例代码"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0