文档章节

Java程序,在程序中实现生产者与消费者过程

啊哈哈哈哈啊
 啊哈哈哈哈啊
发布于 2017/05/04 15:01
字数 271
阅读 3
收藏 0

public class ProducerConsumer {
    public static void main (String args[])
    {
        BufferLock buffer = new BufferLock();
        (new Producer(buffer)).start();
        (new Consumer(buffer)).start();
    }
    
}
 
 class BufferLock                    //加互斥锁的缓冲区
{
    private char  value;                     //共享变量
    private boolean isEmpty=true;          //value是否为空的信号量
     
    public synchronized void put(char c)    //同步方法
    {
        while (!isEmpty)                   //当value不空时,等待
            try
            {
                 this.wait();              //使调用该方法的当前线程等待,即阻塞自己
            }
            catch(InterruptedException e) {}
         
        value = c;                         //当value空时,value获得值
        isEmpty = false;                   //设置value为不空状态
        notify();                          //唤醒其他等待线程
    }
     
    public synchronized char  get()          //同步方法
    {
        while (isEmpty)                    //当value空时,等待
            try
            {
                 this.wait();
            }
            catch(InterruptedException e) {}
 
        isEmpty = true;                    //设置value为空状态,并返回值
        notify();
        return value;                      
    }
}
 
class Producer extends Thread           
{
    private BufferLock buffer;
   char[]  c ={'a','b','c','d','e','f'};
    
    public Producer(BufferLock buffer)
    {
        this.buffer = buffer;
    }
    
    public void run( )
    {
        for (int i=0; i<c.length; i++)
        {
            buffer.put(c[i]);
            System.out.println("生产者的数据是 : "+c[i]);
        }
    }
}
 
class Consumer extends Thread             
{
    private BufferLock buffer;
     
    public Consumer(BufferLock buffer)
    {
        this.buffer = buffer ;
    }
     
    public void run()
    {
        for (int i=0; i<6; i++)
            System.out.println("消费者的数据是 : "+buffer.get());
    }
 
    
}
 

© 著作权归作者所有

啊哈哈哈哈啊
粉丝 0
博文 1
码字总数 271
作品 0
私信 提问
RabbitMQ 入门指南(Java)

RabbitMQ是一个受欢迎的消息代理,通常用于应用程序之间或者程序的不同组件之间通过消息来进行集成。本文简单介绍了如何使用 RabbitMQ,假定你已经配置好了rabbitmq服务器。 RabbitMQ是用Erl...

oschina
2013/06/21
89.6K
22
零基础学Java10系列三:Java高级编程​​​​​​​

更多关于Java高级编程内容链接:零基础学Java10系列三:Java高级编程——阿里云大学 多线程: 生产者和消费者指的是两个不同的线程类对象,两个进程公用一个公共的固定大小缓冲区。其中之一的...

阿里云大学云百科
04/26
0
0
RabbitMQ 实战教程(一) Hello World

原文出处:梁桂钊的博客 准备 本教程假定 RabbitMQ 已在标准端口(5672) 的 localhost 上安装并运行。如果使用不同的主机,端口或凭据,连接设置将需要调整。 介绍 RabbitMQ 是一个消息代理...

lianggui
2018/09/29
0
0
【2】Hello World示例

介绍 RabbitMQ是作为一个消息代理中间件,其设计的目的很简单:收集消息然后转发消息。你可以把它当成一个邮局:当你发送邮件到邮箱时你肯定相信邮递员肯定会把这封邮件送到收件人手上。在这...

不羁青年
2015/08/16
0
0
消息队列ActiveMQ的使用详解

通过上一篇文章 《消息队列深入解析》,我们已经消息队列是什么、使用消息队列的好处以及常见消息队列的简单介绍。 这一篇文章,主要带大家详细了解一下消息队列ActiveMQ的使用。 学习消息队...

snailclimb
2018/04/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

前后端分离-前端搭建(vue)

前端使用vue,那么怎么搭建vue呢 先安装nodejs以及npm 现在基本的nodejs都包含有npm,下载安装后, 可以在cmd命令里输入 node -v 和npm -v 分别查看安装的版本 两个都显示了版本就是安装ok ...

咸鱼-李y
12分钟前
1
0
聊聊elasticsearch的DeadlockAnalyzer

序 本文主要研究一下elasticsearch的DeadlockAnalyzer DeadlockAnalyzer elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/monitor/jvm/DeadlockAnalyzer.java public class Dea......

go4it
12分钟前
1
0
微信点击链接,用默认浏览器中打开指定网址链接!

最近有客户咨询,自己的链接在微信种推广,经常会被无缘无故封杀,有没有一种功能,用户在微信中点击我们推广的链接,可以自动强制跳转到手机默认浏览器中打开指定的网址链接?这样我们的网址...

家布朗根
31分钟前
0
0
PHP实现留言板功能实例代码

本文实例为大家分享了php留言板的实现思路,供大家参考,具体内容如下: 1.创建一个存放留言信息的文件名 2.获取表单中的数据给一个变量 3.判断文件的时候存在 4.对文件执行写的操作,在这之...

sucaihuo
33分钟前
2
0
数据库分库分表策略的具体实现方案【从MySQL开始】

一、MySQL扩展具体的实现方式 随着业务规模的不断扩大,需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量。 关于数据库的扩展主要包括:业务拆分、主从复制,数据...

我最喜欢三大框架
39分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部