同步锁:生产者-消费者问题
来源:互联网 发布:淘宝apass会员 编辑:程序博客网 时间:2024/05/29 06:53
同步锁:生产者-消费者问题
/** 同步锁:多个线程共同操作一个数据结构中的数据*/public class ProducerConsumer {public static void main(String[] args) {/** 消息队列*/final MessageQueue mq = new MessageQueue(10);/** 创建三个生产者*/for(int p=0;p<3;p++){new Thread(new Runnable(){@Overridepublic void run() {while(true){mq.put("消息来了!");/** 生产消息后,休息100毫秒*/try{Thread.currentThread().sleep(100);}catch(InterruptedException e){e.printStackTrace();}}}},"Producer" + p).start();}/** 创建三个消费者*/for(int s=0;s<3;s++){new Thread(new Runnable(){@Overridepublic void run(){mq.get();/** 消费消息后,休息100毫秒*/try{Thread.currentThread().sleep(100);}catch(InterruptedException e){e.printStackTrace();}}},"Consumer" + s).start();}}/** 建立消息队列*/private static class MessageQueue{/** 放置消息的数据结构*/private String[] messages;/** 将要操作的位置索引*/private int opIndex;public MessageQueue(int size){if(size <= 0){throw new IllegalArgumentException("消息队列的长度至少为1");}messages = new String[size];opIndex = 0;}public synchronized void put(String message){ while(opIndex == messages.length){/** 消息队列已满,生产者等待*/try {wait();} catch (InterruptedException e) {e.printStackTrace();}}messages[opIndex] = message;opIndex++;System.out.println("生产者 " + Thread.currentThread().getName() + " 生产了一条消息: " + message);/** 生产后,对消费者进行唤醒*/notifyAll();}public synchronized String get(){while(opIndex == 0){try{wait();}catch(InterruptedException e){e.printStackTrace();}}String message = messages[opIndex-1];opIndex--;System.out.println("消费者 " + Thread.currentThread().getName() + " 消费了一条消息: " + message);/** 消费后,对生产者进行唤醒*/notifyAll();return message;}}}
0 0
- 同步锁:生产者-消费者问题
- 生产者-消费者同步问题
- 生产者消费者问题-同步
- 进程同步-生产者消费者问题
- 操作系统同步生产者消费者问题
- 线程同步生产者消费者问题
- 线程同步-生产者消费者问题
- 进程同步-生产者消费者问题
- java生产者消费者同步问题
- Lock同步锁完美搞定生产者与消费者死锁问题
- 经典进程同步问题-生产者消费者问题
- 生产者消费者模式的线程同步问题
- 经典进程同步问题-生产者与消费者
- 线程同步:生产者和消费者的问题
- 生产者消费者问题(线程同步)
- 经典线程同步问题(生产者&消费者)
- C#生产者与消费者问题 线程同步
- java多线程同步:生产者与消费者问题
- 干货分享|深度学习零基础进阶第四弹!
- 经典蓝牙和BLE 的区别
- Adaboost 算法的原理与推导
- API 25 (Android 7.1.1 API) view.ViewStub
- 8.makefile初步编程学习
- 同步锁:生产者-消费者问题
- Windows增加删除右键新建项
- 数据类型知识点(一)
- Linux scp 命令远程复制
- 专业版win10删除管理员用户解决方法
- Xshell 使用小技巧
- SwipeRefreshLayout下拉刷新+线程池多线程下载+RecyclerView
- 入门基本功:竞品分析到底在分析什么?
- Android酷炫实用的开源框架(UI框架)