java.util.concurrent package的API文档陈述如下:

[…] Additionally, classes are provided only for those types that are commonly useful in intended applications. For example, there is no atomic class for representing byte. In those infrequent cases where you would like to do so, you can use an AtomicInteger to hold byte values, and cast appropriately. You can also hold floats using Float.floatToIntBits and Float.intBitstoFloat conversions, and doubles using Double.doubleToLongBits and Double.longBitsToDouble conversions.

我不是说这是一个方便的解决方案,但这似乎是解释。我想你可能想要包装一个AtomicInteger,并提供访问方法getFloat / setFloat等。

我实际上写了一个。干得好:

import java.util.concurrent.atomic.AtomicInteger;

import static java.lang.Float.*;

class AtomicFloat extends Number {

private AtomicInteger bits;

public AtomicFloat() {

this(0f);

}

public AtomicFloat(float initialValue) {

bits = new AtomicInteger(floatToIntBits(initialValue));

}

public final boolean compareAndSet(float expect, float update) {

return bits.compareAndSet(floatToIntBits(expect),

floatToIntBits(update));

}

public final void set(float newValue) {

bits.set(floatToIntBits(newValue));

}

public final float get() {

return intBitsToFloat(bits.get());

}

public float floatValue() {

return get();

}

public final float getAndSet(float newValue) {

return intBitsToFloat(bits.getAndSet(floatToIntBits(newValue)));

}

public final boolean weakCompareAndSet(float expect, float update) {

return bits.weakCompareAndSet(floatToIntBits(expect),

floatToIntBits(update));

}

public double doubleValue() { return (double) floatValue(); }

public int intValue() { return (int) get(); }

public long longValue() { return (long) get(); }

}

java atomicfloat_Java:有没有AtomicFloat或AtomicDouble?相关推荐

  1. 原子变量 java_Java原子变量详解

    实现全局自增id最简单有效的方式是什么? java.util.concurrent.atomic 包定义了一些常见类型的原子变量.这些原子变量为我们提供了一种操作单一变量无锁( lock-free ) ...

  2. AtomicLong源码解析

    一.前言 AtomicLong是作用是对长整形进行原子操作,是java.util.concurrent.atomic包下的一个提供原子操作的Long类型数据的类.在32位操作系统中,64位的long ...

  3. 实现JDK没有提供的AtomicFloat

    2019独角兽企业重金招聘Python工程师标准>>> Java8内置了强大的多核支持,我们在处理数据的时候,如果不充分利用多核,都好不意思跟老板打招呼. 我们经常会使用Atomic ...

  4. Java高阶代码_Java高阶语法---Volatile

    背景:听说Volatile Java高阶语法亦是挺进BAT的必经之路. Volatile: volatile同步机制又涉及Java内存模型中的可见性.原子性和有序性,恶补基础一波. 可见性: 可见性简 ...

  5. Java编程技巧:如何实现参数的输入输出?

    简介:Java没有直接的输入输出参数机制,无法简单地实现参数的输入输出功能,因此需要借助其它方法来实现.本文作者通过实践总结,分享利用方法参数.方法返回值.类字段等方法来实现参数的输入输出,并对比总结 ...

  6. atomic java_在Java中添加@atomic操作

    atomic java 总览 原子操作如何在Java中工作,OpenJDK / Hotspot中是否存在可以转换为原子的当前替代方法. 反馈 在我以前的文章中, 对可变字段进行原子操作. 有几次指出, ...

  7. 向Java添加@atomic操作

    总览 原子操作如何在Java中工作,OpenJDK / Hotspot中是否存在可以转换为原子的当前替代方法. 反馈 在我以前的文章中, 对可变字段进行原子操作. 有人指出,无论好意如何," ...

  8. 【Java从入门到头秃专栏 6】语法篇(五) :多线程 线程池 可见、原子性 并发包 Lambda表达式

    目录 1 多线程 1.1 基本概念 1.2 创建线程的三种方式 1.4 解决线程安全问题的三种方法 1.5 线程通信 1.6 线程状态 2 线程池 2.1线程池的概念 2.2 创建并提交任务 3 可见 ...

  9. cas java_什么是CAS?JAVA中哪些地方用到来CAS?

    什么是CAS CAS 全称compareAndSet,比较并交换的意思,CAS为无锁操作(其实就是CPU级别的锁,跟操作系统没关系,而且CPU级别的锁比较快). 顾名思义CAS操作分为两步,先比较后交 ...

最新文章

  1. 电脑安装pandas报错_python3.8下如何解决pandas报错No module named '_bz2'问题
  2. 虎虎生威且看今朝 | 数据派优秀志愿者风采展
  3. php opcache 坑,PHP7 opcache缓存清理问题
  4. Java开发工具和环境,你了解多少?(二)
  5. java map 的复制,Java Map的深度复制和浅复制
  6. matlab disteclud,机器学习实战ByMatlab(四)二分K-means算法
  7. mac下npm/node的安装和卸载、升级;node、npm升级后最后删掉node_modules重新安装
  8. nodejs express
  9. NOIP2002复赛 普及组 第1题
  10. 三年级下册计算机课程工作计划,三年级下册信息技术教学工作计划
  11. k8s-controller manager原理分析
  12. 并查集算法学习(转)
  13. 关于Mac下mysql8.0的启动
  14. 数据结构和算法——线性结构(3)递归和斐波那契数列、汉诺塔问题
  15. 电脑键盘上的快捷建大全
  16. 身份证二要素,帮你轻松搞定实名认证
  17. LeetCode 1218 最长定差子序列
  18. cat 链接并显示文件
  19. 缝的是鞋,连的,却是人心。
  20. 熔断器Hystrix

热门文章

  1. SqlServer注意事项总结,高级程序员必背。
  2. Dbml文件提取建表TSql-CodeSmith
  3. pycharm 通过 SFTP 远程编辑项目的配置
  4. 音频监控叫好又叫座,核心部件拾音器怎么装?
  5. centos7 安装配置mesos+marathon+zookeeper
  6. Elasticsearch——Search的基本介绍
  7. 【Spring实战】注入非Spring Bean对象
  8. 网页设计风格变化的一点共性
  9. 教你如何使用EXCEL中的lookup函数(摘自“MS帮助和支持”)
  10. Ants UVA - 1411(km板题竟然让我换了个板子)