`
sammor
  • 浏览: 409766 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

多线程 基本类型的原子性问题

阅读更多

在java的语言规格中,一开始就定义了一些原子的操作,如,char ,int 这些的赋值与引用是原子的,

例如,两个线程同时对int类型的字段n进行赋值,一个使n=123 ,一个线程使n=345.

那么最后n的值不是123就是345,而不用担心模式会混合在一起。

但long与double的指定,引用操作并不是不可分割的

如对于long类型的a 赋值 ,两个线程分别使其a = 1234L ,a = 5678L

结果可能为,1234L,也可能为5678L,也可能为12345678L,也可能0L,等其他的方式。

解决方法,

1、加synchronized内操作。

2、在前面加上volatile关键字,则这些字段的操作就会成为不可分割的了

分享到:
评论

相关推荐

    linux之线程同步的概要介绍与分析

    在Linux操作系统中,线程同步是多线程编程中的一个核心概念,它确保了多个线程在访问共享资源时的正确性与一致性,避免了诸如数据竞争和竞态条件等问题。为了实现这一目标,Linux提供了一系列强大的线程同步机制和...

    Java并发编程实战

    2.2 原子性14 2.2.1 竞态条件15 2.2.2 示例:延迟初始化中的竞态条件16 2.2.3 复合操作17 2.3 加锁机制18 2.3.1 内置锁20 2.3.2 重入21 2.4 用锁来保护状态22 2.5 活跃性与性能23 第3章 对象的共享27 3.1...

    .NET之美:.NET关键技术深入分析

    1.4.3 常量性和原子性 1.4.4避免外部类型对类型内部的访问 1.5本章小结 第2章C#中的泛型 2.1理解泛型 2.1.1 为什么要有泛型 2.1.2类型参数约束 2.1.3泛型方法 2.2泛型与集合类型 2.2.1 避免隐式的装箱和...

    \java超强笔记(超级经典)

    java.util.concurrent 包含了常用的多线程工具,是新的多线程工具的主体。 java.util.concurrent.atomic 包含了不用加锁情况下就能改变值的原子变量。 java.util.concurrent.locks 包含锁定的工具。 ...

    leetcode下载-studyday:记得我

    leetcode下载 RememberMe glinlf-2019-03-27 java基础 Java并发编程 推荐去看 Java并发编程的艺术(虽然感觉讲的不是非常深入 ...多线程安全 需要保证 1 原子性 2 可见性 3 顺序性 三大特性。 JVM Java JVM

    SQL Server 2008数据库设计与实现

     4.4.1 所有属性必须是原子的  4.4.2 实体的所有实例必须包含相同数量的值  4.4.3 实体中出现的所有实体类型都必须不同  4.4.4 第一范式所避免的不规则编程  4.4.5 当前设计不符合第一范式的线索  4.5 ...

    java面试题

    答:Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式允许其service方法,一个实例可以服务于多个请求,并且其实例一般不会被销毁,而CGI对每个请求都产生新的进程,服务完后就销毁,所以效率上...

    juc:java线程研究记录

    java 中的乐观锁基本都是通过 CAS 操作实现的,CAS 是一种更新的原子操作,比较当前值跟传入 值是否一样,一样则更新,否则失败2,悲观锁 悲观锁是就是悲观思想,即认为写多,遇到并发写的可能性高,每次去拿数据的...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    3.1.1 基本数据类型——编程语言中的数据原子 33 3.1.2 Java中的基本上数据类型介绍 34 3.1.3 基本数据类型值域 34 3.2 Java运算符 36 3.2.1 变量的概念 36 3.2.2 插曲:Java中的语句 37 3.2.3 创建一个变量和...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    3.1.1 基本数据类型——编程语言中的数据原子 33 3.1.2 Java中的基本上数据类型介绍 34 3.1.3 基本数据类型值域 34 3.2 Java运算符 36 3.2.1 变量的概念 36 3.2.2 插曲:Java中的语句 37 3.2.3 创建一个变量和...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例143 使用线程池优化多线程编程 186 实例144 Object类中线程相关的方法 187 实例145 哲学家就餐问题 189 实例146 使用信号量实现线程同步 190 实例147 使用原子变量实现线程同步 191 实例148 使用事件分配线程...

    java面试800题

    volatile:volatile变量表示保证它必须是与主内存保持一致,它实际是""变量的同步"", 也就是说对于volatile变量的操作是原子型的,如用在long 或 double变量前,一般用于多线程编程。 abstract:抽象,必须重载,修饰...

    开涛高可用高并发-亿级流量核心技术

    11.5 更新缓存与原子性 225 11.6 缓存崩溃与快速修复 226 11.6.1 取模 226 11.6.2 一致性哈希 226 11.6.3 快速恢复 226 12 连接池线程池详解 227 12.1 数据库连接池 227 12.1.1 DBCP连接池配置 228 12.1.2 DBCP配置...

    java核心知识点整理.pdf

    线程 ...................................................................................................................................................... 20 2.2. JVM 内存区域 .........................

    JAVA核心知识点整理(有效)

    2.1. 线程 ...................................................................................................................................................... 20 2.2. JVM 内存区域 .....................

    史上最强全面解析SQLite

    弱类型和BLOB技术支持 ............................................................ 11 支持UTF-8和UTF-16............................................................... 11 用户定义的分类排序 ...............

Global site tag (gtag.js) - Google Analytics