线程原子操作
(PS:记录学习轨迹,如有问题,请拍砖:)
一 概念
二 常见情况
三 实例:序列号问题
四 建议:安全操作
五 参考资料
一 概念
(automic operation)即不能被线程调度机制中断的操作。原子操作不需要进行同步控制。
二 常见情况
如果问题中的变量除了long or double 以后的基本类型,对这些类型进行简单的赋值或者返回操作时是原子操作。为类型long and double 加上volatile修饰符,对这两个基本类型的操作也是原子的。
JVM中自增或减并不是原子操作,i++ or i-- 因为其中涉及一次读和写,在执行过程中可能被修改。
三 实例:序列号问题
每个线程都可能在本地拥有一个本地的栈以维护一些变量的复本。如果把一个变量变成volatile,就等于告诉编译器不要做任何优化,这些优化可能会移除那些字段与线程里的本地复本保持同步的读写操作。
uml,源码在附件
四 原子操作只有对基本类型进行读取或赋值操作时才会被认为是安全的。
最安全的两个方针:
1 如果你要对类的某个方法进行同步,那么最好同步所有 的方法。
2 去除方法的同步控制时,要十分小心。通常这么做是因为性能的有瓶颈时,最好利 用性能评价工具证实。
五 参考资料:
《Thinking in java》 author:Bruce Eckel
基本线程--共享受限资源--解决共享资源竞争--原子操作
volatile: http://baike.baidu.com/view/608706.htm
http://galaxystar.iteye.com/blog/109150
内存模型 http://blog.csdn.net/silentbalanceyh/ archive/2009/10/13/4661230.aspx
- 大小: 7.9 KB
分享到:
相关推荐
原子更新数组类顾名思义,通过原子的方式更新数组里的某个元素,Atomic包提供了以下三个类: AtomicIntegerArray:原子更新整型数组里的元素。 AtomicLongArray:原子更新长整型数组里的元素。 ...
java多线程安全性基础介绍 线程安全 正确性 什么是线程安全性 原子性 竞态条件 i++ 读i ++ 值写回i 可见性 JMM 由于cpu和内存加载速度的差距,在两者之间增加了多级缓存导致,内存并不能直接对cpu可见。 ...
Java 多线程与并发(8_26)-JUC原子类_ CAS, Unsafe和原子类详解
Java并发编程的核心概念包括: 线程(Thread):线程是程序执行流的最小单元。...原子操作(Atomic Operations):原子操作是不可中断的操作,即在多线程环境中,这些操作要么完全执行,要么完全不执行。
如果应场景需要个更范围的原性保证,Java内存模型还提供了lock和unlock操作来满这种需求,尽管虚拟机未把lock与unlock操作直接开放给户使,但是却
主要介绍了Java多线程Atomic包操作原子变量与原子类详解,简单介绍了Atomic,同时涉及java.util.concurrent中的原子变量,Atomic类的作用等相关内容,具有一定参考价值,需要的朋友可以了解下。
主要介绍了Java多线程编程中需要注意的一些关键点,包括ThreadLocal变量与原子更新等一些深层次的内容,需要的朋友可以参考下
同步控制是并发程序必不可少的重要手段,本文我们将通过重入锁、读写锁、信号量、倒计数器和循环栅栏以及他们的实例来介绍Java并发程序中的同步控制。 目录线程安全 Thread Safety重入锁 ReentrantLock读写锁 ...
引言JavaGuide :一份涵盖大部分Java程序员所需要掌握的核心知识。star:45159,替他宣传一下子这位大佬,总结的真好!我引用这位大佬的文章,因为
文章目录多线程安全问题和锁线程在jvm中的特点锁的出现synchronized 关键字-监视器锁monitor lock死锁的产生和避免 什么是线程安全问题? 当多个线程同时操作同一个数据是,可能会出现数据不一样的情况,这就是线程...
1.1为什么需要多线程 1.2不安全示例 1.3并发问题的根源 1.4JMM 1.5线程安全的分类 1.6线程安全的方法 二、线程基础 2.1状态 2.2使用方式 2.3基础机制 2.4中断 2.5互斥同步 2.6线程合作 三、...
02 Java 程序中的多线程 03 编写多线程的 Java 应用程序 04 如果我是国王:关于解决 Java编程语言线程问题的建议 (2) 05 构建Java并发模型框架 (2) 06 Java 技术: 使您轻松地进行多线程应用程序编程 07 使用...
JUC(Java Util Concurrent)是Java中用于并发编程的工具包,提供了一组接口和类,用于处理多线程和并发操作。JUC提供了一些常用的并发编程模式和工具,如线程池、并发集合、原子操作等。 JUC的主要特点包括: ...
本资源涵盖了Java并发编程的理论基础和实践,主要包括可见性、原子性和有序性的详细介绍,以及多线程的使用原因、好处和坏处等方面...我们还将讲解Java多线程开发的好处和坏处,并探讨如何尽量减少由多线程带来的问题。
Executor框架是Java并发编程中的一个重要工具,它提供了一种管理...原子操作在并发编程中具有重要的作用,可以保证多个线程对同一个变量的操作是线程安全的。 在两个线程之间共享数据,可以通过以下几种方式实现:
24.Java中atomic包中的原子操作类总结 25.大白话说java并发工具类-CountDownLatch,CyclicBarrier 26.大白话说java并发工具类-Semaphore,Exchanger 27.一篇文章,让你彻底弄懂生产者--消费者问题
比赛可以进行多种参赛...在比赛注册时候使用的都是单线程的报名方式,所以没有考虑安全性,如果需要保证比赛的报名在多线程中进行则只需修改比赛者队列为按线程安全的集合即可。 没有进行严格测试,有兴趣的可以看看。
volatile关键字的非原子性、volatile关键字的使用、AtomicInteger原子性操作、线程安全小例子:多个线程竞争问题、多个线程多个锁问题、创建一个缓存的线程池、多线程使用Vector或者HashTable的示例(简单线程同步...
这篇指南主要是为帮助java多线程开发人员理解并发的核心概念以及如何应用这些理念。本文的主题是关于具有java语言风格的Thread、synchronized、volatile,以及J2SE5中新增的概念,如锁(Lock)、原子性(Atomics)、并发...