文档章节

java生产者消费者同步问题

JKXQJ
 JKXQJ
发布于 2017/09/06 15:01
字数 253
阅读 2
收藏 0
public class TestThread {
    public static void main(String[] args) {
        Data data=new Data();
        new Thread(new DataProvider(data)).start();
        new Thread(new DataConsumer(data)).start();
    }
}

class Data{
    private String title;
    private String note;
    //flag=false表示生产完毕,允许消费者取走,但是不允许再生产。
    //flag=true表示允许生产,不允许消费者取走。
    private boolean flag=false;  
    public synchronized void get(){  
        if(flag==false){  //flag=false表示生产完毕,允许消费者取走,但是不允许再生产。
            try {
                super.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        try {
            Thread.sleep(5);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(this.title+="="+this.note);
        this.flag=false; //表示已经生产过了,不允许再生产
        super.notify();  //唤醒等待线程
    }

    public synchronized void set(String title,String note){
        if(flag==true){  
            try {
                super.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        this.title=title;
        try {
            Thread.sleep(15);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        this.note=note;
        this.flag=true;  //表示继续生产。
        super.notify();
    }
}
class DataProvider implements Runnable{
    private Data data;
    public DataProvider(Data data){
        this.data=data;
    }
    @Override
    public void run() {
        for(int x=0;x<50;x++){
            if(x%2==0){
                this.data.set("jk","666");
            }else{
                this.data.set("xx","555");
            }
        }
    }
}
class DataConsumer implements Runnable{
    private Data data;
    public DataConsumer(Data data){
        this.data=data;
    }
    @Override
    public void run() {
        for(int x=0;x<50;x++){
            this.data.get();
        }
    }
}

本文转载自:http://blog.csdn.net/jkxqj/article/details/77531533

JKXQJ
粉丝 0
博文 15
码字总数 0
作品 0
武汉
程序员
私信 提问
Flex利用JMS通过Queue消息队列与JAVA通信问题

问题描述:(以前是利用远程调用的方式与java交互,现在改成利用消息)利用flex写的前端发送消息,通过ActiveMQ将消息转给JAVA,JAVA接受到这个消息之后在反馈一个消息给前端。需求是利用Que...

李海峰1922
2014/07/01
475
1
Java ConcurrentLinkedQueue队列线程安全操作

 Java ConcurrentLinkedQueue队列线程安全操作 代码示例: 代码运行结果: 致谢: 冯贵兵对本文有重大贡献! 附录: 1,《Java同步机制:synchronized,wait,notify》链接地址:http://...

开开心心过
2017/03/25
0
0
Java并发基础你需要知道的基础知识

多线程和并发编程是Java里面的核心内容,通常有以下一些概念需要重点掌握。 线程; 锁; 同步器; 并发容器和框架; Java并发工具类; 原子操作类; Executor框架(执行机制); 并发基础概念 ...

异步社区
2018/05/30
0
0
零基础学Java10系列三:Java高级编程​​​​​​​

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

阿里云大学云百科
04/26
32
0
java基础thread——java5之后的多线程(浅尝辄止)

承上启下 虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象L...

潇潇漓燃
2018/06/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Cloud 笔记之Spring cloud config client

观察者模式它的数据的变化是被动的。 观察者模式在java中的实现: package com.hxq.springcloud.springcloudconfigclient;import org.springframework.context.ApplicationListener;i...

xiaoxiao_go
今天
4
0
CentOS7.6中安装使用fcitx框架

内容目录 一、为什么要使用fcitx?二、安装fcitx框架三、安装搜狗输入法 一、为什么要使用fcitx? Gnome3桌面自带的输入法框架为ibus,而在使用ibus时会时不时出现卡顿无法输入的现象。 搜狗和...

技术训练营
今天
4
0
《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
今天
7
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
今天
7
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部