package ProduceQueueProduce;

import java.util.Queue;

public class ProducerThread extends Thread {
public static Queue<Object> q;
private int eleNum =15;
@Override
public void run(){
while(true){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
produce();
}
} private void produce() {
synchronized(q){
while(q.size() == eleNum){
try {
q.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
q.add(new Object());
System.out.println(Thread.currentThread().getName()+"生产者队列大小:"+ q.size());
q.notifyAll();
}
} public ProducerThread(String name) {
super(name);
}
}
package ProduceQueueProduce;

import java.util.Queue;

public class ConsumerThread extends Thread {
public static Queue<Object> q;
@Override
public void run(){
while(true){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
consume();
}
} private void consume() {
synchronized(q){
while(q.size() == 0){
try {
q.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
q.remove();
System.out.println(Thread.currentThread().getName()+"消费者队列大小:"+q.size());
q.notifyAll();
}
} public ConsumerThread(String name) {
super(name);
}
}
package ProduceQueueProduce;

import java.util.ArrayDeque;
import java.util.Queue; public class Test {
public static Queue<Object> q = new ArrayDeque<>();
public static void main(String args[]) throws InterruptedException {
ConsumerThread c = new ConsumerThread("c");
ProducerThread p = new ProducerThread("p");
ProducerThread.q=q;
ConsumerThread.q = q;
p.start();
c.start(); }
}

												

生产者消费者synchronized wait notify的更多相关文章

  1. 生产者消费者模型——wait/notify/notifyAll使用

    告警系统架构如下 1. 数据处理系统处理完原始数据并入库后,发送消息到kafka系统: 2. 告警生产者从kafka系统查询消息存入告警消息队列: 3. 告警消费者从告警消息队列查询消息进行处理. 这 ...

  2. synchronized wait notify 生产者消费者

    1.生产者消费者模型 public class ProducterConsumerTest{ public static void main(String[] args){ System.out.pr ...

  3. 通过生产者消费者模式例子讲解Java基类方法wait、notify、notifyAll

    wait(),notify()和notifyAll()都是Java基类java.lang.Object的方法. 通俗解释wait():在当前线程等待其它线程唤醒.notify(): 唤醒一个线程正在等 ...

  4. 如何在 Java 中正确使用 wait, notify 和 notifyAll – 以生产者消费者模型为例

    wait, notify 和 notifyAll,这些在多线程中被经常用到的保留关键字,在实际开发的时候很多时候却并没有被大家重视.本文对这些关键字的使用进行了描述. 在 Java 中可以用 wait ...

  5. Java 学习笔记 使用synchronized实现生产者消费者模式

    说明 Object.wait()使当前的线程进入到等待状态(进入到等待队列) Object.notifyAll() 唤醒等待中的全部线程 Object.notify() 随机唤醒一个线程 代码 con ...

  6. java使用synchronized与Semaphore解决生产者消费者问题对比

    一.synchronized与信号量Semaphore简介 1.synchronized是java中的关键字,是用来控制线程同步的问题最常用的方法. 2.Semaphore是属于java的一个类,同样 ...

  7. java多线程15 :wait()和notify() 的生产者/消费者模式

    什么是生产者/消费者模型 一种重要的模型,基于等待/通知机制.生产者/消费者模型描述的是有一块缓冲区作为仓库,生产者可将产品放入仓库,消费者可以从仓库中取出产品,生产者/消费者模型关注的是以下几个点: ...

  8. Java 中 wait, notify 和 notifyAll的正确使用 – 以生产者消费者模型为例

    如何使用Wait 尽管关于wait和notify的概念很基础,它们也都是Object类的函数,但用它们来写代码却并不简单.如果你在面试中让应聘者来手写代码,用wait和notify解决生产者消费者问题 ...

  9. 多线程学习-基础(十二)生产者消费者模型:wait(),sleep(),notify()实现

    一.多线程模型一:生产者消费者模型   (1)模型图:(从网上找的图,清晰明了) (2)生产者消费者模型原理说明: 这个模型核心是围绕着一个“仓库”的概念,生产者消费者都是围绕着:“仓库”来进行操作, ...

随机推荐

  1. spring cloud_1_mm_eureka

    有的人不知道导什么包 什么版本好 可能教程版本十几根本不能用 这里建议直接用idea生成 避免麻烦 eureka-sever application.yml #注册中心端口 server: port: ...

  2. python标准库之random模块

    Python中的random模块用于生成随机数. 下面具体介绍random模块的功能: 1.random.random() #用于生成一个0到1的 随机浮点数:0<= n < 1.0 1 ...

  3. Kafka如何彻底删除topic及数据

    前言:删除kafka topic及其数据,严格来说并不是很难的操作.但是,往往给kafka 使用者带来诸多问题.项目组之前接触过多个开发者,发现都会偶然出现无法彻底删除kafka的情况.本文总结多个删 ...

  4. E - 改革春风吹满地

    按顺时针或者逆时针顺序输入n个点,求输入点围城的多边形的面积.凸凹都可以计算. 模板 #include <iostream> #include <cstring> #inclu ...

  5. ViewpageWebview

    import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bund ...

  6. centos的nginx如何访问本地共享文件夹的文件 nginx访问404,403问题

    关键挂载 sudo vmhgfs-fuse .host:/musings /home/xxx -o allow_other,uid=0,gid=0

  7. DedeCms 数据库类使用实例说明 mysql.php

    //dedecms的数据库操作类说明,非常实用,在二次开发中尤其重要.//引入common.inc.php文件require_once (dirname(__FILE__) . "/incl ...

  8. ionic页面间跳转的动画实现

    1. 在<ion-view>标签中加入: nav-direction="back"或nav-direction="forward" 2.用$stat ...

  9. Android Studio学习之 日志工具

    Log.v()   低级日志 Log.d(' ',' ')  debug调试信息 第一个参数tag,当前类名 第二个参数msg,打印具体内容 Log.i()  info数据 Log.w() warn警 ...

  10. NodeJS 学习笔记

    1. NodeJs的事件模型被称为非阻塞式IO或者事件驱动IO 2. Node.js 几乎每一个 API 都是支持回调函数的. 3. Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现 ...