原子性

1、不可以被中断

2、基本数据类型除了long和double之外,读其的读写都是原子的。如果设置long和double为volatile则也是原子的。

3、java现在有AutomicInteger等原子类。

4、我认为java多线程的原子性意味着两方面:

1、存在互斥机制 (long的访问实际上是多余一条指令,那么多线程访问的话势必存在中间状态,所以存在互斥机制)

2、不可被中断(我理解的是一定要运行完,才能被调度器调度到ready)(long的访问实际上是多余一条指令,因为存在互斥机制,如果执行中被调度器调度到ready状态那么势必会等待很长时间,所以应该是不可被中断)

时间: 2024-10-25 11:37:57

原子性的相关文章

【慕课网学习笔记】Java共享变量的可见性和原子性

1. Java内存模型(Java Memory Model, JMM) Java的内存模型如下,所有变量都存储在主内存中,每个线程都有自己的工作内存. 共享变量:如果一个变量在多个线程中都使用到了,那么这个变量就是这几个线程的共享变量. 可见性:一个线程对共享变量的修改,能够及时地到主内存并且让其他的线程看到. 怎么理解上面的可见性的意思呢? 线程对共享变量的修改,只能在自己的工作内存里操作,不能直接对主内存中的共享变量进行修改.而且一个线程不能直接访问另一个线程中的变量的值,只能通过主内存进行

编写安全代码:小心volatile的原子性误解

本文的copyleft归[email protected]所有,使用GPL发布,可以自由拷贝,转载.但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途. ====================================================================================================== 关于volatile的说明,这是一个老生常谈的问题.volatile的定义很简单,将其理解为易变的,防止编译器对其进行优化.

事务四大特征:原子性,一致性,隔离性和持久性(ACID)

一.事务 定义:所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位. 准备工作:为了说明事务的ACID原理,我们使用银行账户及资金管理的案例进行分析. [sql] view plaincopyprint? // 创建数据库 create table account( idint primary key not null, namevarchar(40), moneydouble ); // 有两个人开户并存钱 insert into account valu

探究加法操作的原子性

加法在多线程下是否可靠? 我们先看下面的实例: #include <iostream> #include <string> #include <vector> #include <thread> #include <stdio.h> #include <memory> using namespace std; int g_count = 0; int main(int argc, const char *argv[]) { vecto

Java并发框架——AQS之原子性如何保证?

在研究AQS框架时,会发现这个类很多地方都使用了CAS操作,在并发实现中CAS操作必须具备原子性,而且是硬件级别的原子性,java被隔离在硬件之上,明显力不从心,这时为了能直接操作操作系统层面,肯定要通过用C++编写的native本地方法来扩展实现.JDK提供了一个类来满足CAS的要求,sun.misc.Unsafe,从名字上可以大概知道它用于执行低级别.不安全的操作,AQS就是使用此类完成硬件级别的原子操作. Unsafe是一个很强大的类,它可以分配内存.释放内存.可以定位对象某字段的位置.可

缓存MEMCACHE 使用原子性操作add,实现并发锁

memcache中Memcache::add()方法在缓存服务器之前不存在key时, 以key作为key存储一个变量var到缓存服务器.我们使用add来向服务器添加一个键值对应,如果成功则添加,否则说明存在另一个并发作业在进行操作.通过add的原子性来判断是否要执行热点代码.具体代码需结合上一篇的php使用memcache.使用该方法控制并发需要考虑到缓存的有效期.缓存基于内存的特点. 实现一个包含锁,解锁,锁状态检查的类cacheLock: 1 class cacheLock{ 2 const

8.volatile原子性

原子性 1.一个操作是不可中断的,即使多个线程在一起执行的时候,一旦操作执行开始,就不会被其他的线程干扰执行并导致执行中断. 2.对于静态变量int ,2个线程同时对它进行修改,线程a对它修改为10,线程b对它修改为15,a.b线程之间是没有干扰的,最后的结果要么是10或者15. 3.非原子性操作时,都会存在线程安全问题,所以需要同步技术synchronized使操作变成原子性,一个操作是原子性操作,那么它就具有原子性. volatile 1.关键字虽然拥有多个线程之间的可见性,但是却不具有同步

java 并发原子性与易变性 来自thinking in java4 21.3.3

java 并发原子性与易变性  具体介绍请參阅thinking in java4 21.3.3 thinking in java 4免费下载:http://download.csdn.net/detail/liangrui1988/7580155 package org.rui.thread.volatiles; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * 假设

【转】为什么volatile不能保证原子性而Atomic可以?

直接上好文链接!!! 为什么volatile不能保证原子性而Atomic可以?

【系统架构】缓存Memcache 使用原子性操作add,实现并发锁

原文地址 memcache中Memcache::add()方法在缓存服务器之前不存在key时, 以key作为key存储一个变量var到缓存服务器.我们使用add来向服务器添加一个键值对应,如果成功则添加,否则说明存在另一个并发作业在进行操作.通过add的原子性来判断是否要执行热点代码.具体代码需结合上一篇的php使用memcache.使用该方法控制并发需要考虑到缓存的有效期.缓存基于内存的特点. 实现一个包含锁,解锁,锁状态检查的类cacheLock: class cacheLock{ cons