文档章节

volatile/CAS/atomicInteger/BlockQueue/线程交互/原子引用

一只小青蛙
 一只小青蛙
发布于 05/20 23:06
字数 268
阅读 4
收藏 1
CAS

import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger;

class MyResource{ private volatile boolean FLAG = true;//默认开启,进行生产+消费 private AtomicInteger atomicInteger = new AtomicInteger();

BlockingQueue<string> blockingQueue = null;
public MyResource(BlockingQueue<string> blockingQueue) {
    this.blockingQueue = blockingQueue;
    System.out.println(blockingQueue.getClass().getName());
}

public void myProd() throws Exception{
    String data = null;
    boolean retValue;
    while(FLAG){
        data = atomicInteger.incrementAndGet()+"";
        retValue = blockingQueue.offer(data,2L, TimeUnit.SECONDS);
        if(retValue){
            System.out.println(Thread.currentThread().getName()+"\t插入队列"+data+"成功");
        }else{
            System.out.println(Thread.currentThread().getName()+"\t插入队列"+data+"失败");
        }
        TimeUnit.SECONDS.sleep(1);
    }
    System.out.println(Thread.currentThread().getName()+"\t生产停止");
}

public void myConsumer() throws Exception{
    String result = null;
    while(FLAG){
        result = blockingQueue.poll(2L,TimeUnit.SECONDS);
        if(null==result || result.equalsIgnoreCase("")){
            FLAG = false;
            System.out.println(Thread.currentThread().getName()+"\t 超过2秒,消费退出");
            System.out.println();
            System.out.println();
            return;
        }
        System.out.println(Thread.currentThread().getName()+"\t消费队列"+result+"成功");
    }
}

public void stop() throws Exception{
    this.FLAG = false;
}

}

/*

  • volatile/CAS/atomicInteger/BlockQueue/线程交互/原子引用
  • */

public class ProdConsumer_BlockQueueDemo { public static void main(String[] args) throws Exception{ MyResource myResource = new MyResource(new ArrayBlockingQueue<>(10));

    new Thread(()-&gt;{
        System.out.println(Thread.currentThread().getName()+"\t 生产线程启动");
        System.out.println();
        System.out.println();
        try{
            myResource.myProd();
        }catch (Exception e){
            e.printStackTrace();
        }
    },"Prod").start();

    new Thread(()-&gt;{
        System.out.println(Thread.currentThread().getName()+"\t 消费线程启动");
        try{
            myResource.myConsumer();
        }catch (Exception e){
            e.printStackTrace();
        }
    },"Consumer").start();

    try{TimeUnit.SECONDS.sleep(5);}catch (InterruptedException e){e.printStackTrace();}

    System.out.println();
    System.out.println();
    System.out.println();

    System.out.println("5秒钟到,main停止");
    myResource.stop();
}

} </string></string>

© 著作权归作者所有

上一篇: Java 并发编程
下一篇: 数据库
一只小青蛙
粉丝 2
博文 34
码字总数 17045
作品 0
杭州
私信 提问
Java进阶——Java中的Atomic原子特性

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_30379689/article/details/80785650 引言 这篇文章会从基本概念中入手,首先,从volatile关键字引出原子性...

Hensen_
2018/06/23
0
0
volatile原理与技巧--Java

为什么使用volatile比同步代价更低? 同步的代价, 主要由其覆盖范围决定, 如果可以降低同步的覆盖范围, 则可以大幅提升程序性能. 而volatile的覆盖范围仅仅变量级别的. 因此它的同步代价很低....

刘小兵2014
2010/12/07
0
0
JAVA 并发编程实践 - 原子变量与非阻塞同步机制 笔记

非阻塞算法: 利用底层的源自机器指令(比如CAS)代替锁来实现数据在并发访问中的一致性。应用于:操作系统和JVM中实现线程/进程调度机制,垃圾回收机制以及锁和其他并发数据结构。 与基于锁的方...

pczhangtl
2014/01/20
0
1
并发三:J.U.C---CAS与原子变量

CAS CAS(Compare-And-Swap)是CPU的原子指令,中文翻译成比较交换,汇编指令为CMPXCHG。CAS操作包含三个操作数内存值V、预期原值A和新值B,当且仅当预期原值A和内存值V相同时,将内存值V修改为...

wangjie2016
2017/06/19
0
0
原子变量与非阻塞同步机制(第十五章)

原子变量与非阻塞同步机制 与基于锁的方案相比,非阻塞算法在设计和实现上都要负责得多,但它们在可伸缩性和活跃性上拥有巨大的优势。原子变量提供了与volatile类型变量相同的内存语义,此外...

关山月朦胧
2017/11/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

ubuntu 安装zoom

之前ubuntu安装zoom失败了,也没管。后来安装其他软件报出依赖错误,由于zoom安装失败导致其他并不想干的安装出错。 pvc@pvc-Vostro-3650:~$ sudo apt-get install libnet1-dev 正在读取软件...

琴麻岛
6分钟前
0
0
Spring Boot项目每次请求Session都不一样的记录

背景 网站注册模块有个带图片验证码验证的环节,实现思路为:前端请求获取图片验证码的接口,接口里生成图片验证码,并保存在session;验证图片验证码时,从session中获取图片验证码与当前请...

豫华商
7分钟前
0
0
Azure Monitor现可一次监控整个虚拟机扩展集

Azure Monitor现在可以用来分析以及监控虚拟机扩展集(Scale Set)的健康程度以及效能,支持的操作系统包含Windows和Linux,目前这项功能仍在公开预览阶段。虚拟机扩展集指的是由Azure VM Sc...

kocker
11分钟前
0
0
上篇:《对于HashMap,你知道多少?》

阅读目录 一、前言 二、源码解读 三、并发场景中使用HashMap会怎么样? 四、怎样合理使用HashMap? 一、前言 HashMap在面试中是个火热的话题,那么你能应付自如吗?下面抛出几个问题看你是否知...

Java干货分享
15分钟前
0
0
突破!阿里云CDN实现毫秒级全网刷新

通常在某网站使用了CDN节点来实现内容分发加速后,当源站内容更新的时候,CDN刷新系统会通过提交刷新请求将CDN节点上的指定缓存内容强制过期。当用户访问的时候,CDN节点将回源获取最新内容返...

zhaowei121
17分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部