`
zhaoyanfangeye
  • 浏览: 122698 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

原子操作实现并发

阅读更多
使用synchronized:
    使用synchronized关键字时,如果一个线程想要获取其他线程已经具有的锁,那么该线程将被阻塞

,直到锁可用,当该线程被阻塞等待锁时,他无法进行其他任何操作。

比较并交换(CAS):
    使用该方式不用让其他线程进行等待,该方式是用cmpxchg系列指令实现。

原子变量类
    使用原子操作,原子变量类可以认为是volatile变量的泛化,此方法也是由比较并交换方式来实现的。
/**
 * 原始操作类
 * @author user
 *
 */
public class SimulatedCAS {

	private int value;
	public synchronized int getValue(){
		return value;
	}
	/**
	 * 判断内存中的值与预期的值进行比较,如果内存中的不变,那么就将新值赋给当前内存
	 * @param expected 原始值
	 * @param newValue 新值
	 * @return
	 */
	public synchronized int compareAndSwap(int expected,int newValue){
		if(value==expected)
			value=newValue;
		return value;
	}
}

public class CasCounter {
	private SimulatedCAS value;
	public CasCounter(SimulatedCAS value){
		this.value=value;
	}
	public int getValue(){
		return value.getValue();
	}
	public int increment(){
		int oldValue=value.getValue();
		if(value.compareAndSwap(oldValue, oldValue+1)!=oldValue)
			oldValue=value.getValue();
		return oldValue;
	}
}

查看资料
http://www.blogjava.net/freeman1984/archive/2011/10/17/361402.html
http://www.blogjava.net/freeman1984/archive/2011/10/17/361403.html

分享到:
评论

相关推荐

    分布式Redis原子操作示例

    分布式Redis原子操作示例,近期项目中遇到分布式项目中多节点大并发操作redis同一个key。此案例利用java调用LUA脚本实现redis操作的原子性。分享出来大家参考。

    聊聊并发(5)原子操作的实现原理Java开发Java经验技

    聊聊并发(5)原子操作的实现原理Java开发Java经验技巧共8页.pdf.zip

    Java 并发学习笔记:进程和线程,并发理论,并发关键字,Lock 体系,原子操作类,发容器 & 并发工具,线程池,并发实践

    原子操作类, 发容器 & 并发工具, 线程池, 并发实践 Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的语言,意味着可以在不同的操作系统上运行。Java具有简单、可移植、高性能和...

    聊聊并发系列文章

    5. 聊聊并发(五)原子操作的实现原理 6. 聊聊并发(六)ConcurrentLinkedQueue的实现原理 7. 聊聊并发(七)Java中的阻塞队列 8. 聊聊并发(八)Fork/Join框架介绍 9. 聊聊并发(九)Java中的CopyOnWrite容器 10. ...

    锁与原子操作CAS以及无锁队列的底层实现相关资源

    锁与原子操作CAS以及无锁队列的底层实现相关资源

    java并发理论基础、可见性、原子性、有序性详解

    本资源涵盖了Java并发编程的理论基础和实践,主要包括可见性、原子性和有序性的详细介绍,以及多线程的使用原因、好处和坏处等方面的内容。 Java并发编程是一种高效的编程技术,通过多线程实现将计算过程中不必要的...

    面试官:谈谈你对并发编程下原子性操作的认识

    文章目录引出问题(代码示例)问题原理说明问题解决方法1:使用锁机制方法2:原子类AtomicInteger原子类CAS机制实现线程安全概述源码分析CAS与Synchronized:乐观锁,悲观锁。 概述:所谓的原子性是指在一次操作或者...

    Java并发编程实战

    3.1.2 非原子的64位操作 3.1.3 加锁与可见性 3.1.4 Volatile变量 3.2 发布与逸出 3.3 线程封闭 3.3.1 Ad-hoc线程封闭 3.3.2 栈封闭 3.3.3 ThreadLocal类 3.4 不变性 3.4.1 Final域 3.4.2 示例:使用...

    《Java并发编程的艺术》源代码

    第2章介绍Java并发编程的底层实现原理,介绍在CPU和JVM这个层面是如何帮助Java实现并发编程的。 第3章介绍深入介绍了Java的内存模型。Java线程之间的通信对程序员完全透明,内存可见性问题很容易困扰Java程序员,本...

    【2018最新最详细】并发多线程教程

    24.Java中atomic包中的原子操作类总结 25.大白话说java并发工具类-CountDownLatch,CyclicBarrier 26.大白话说java并发工具类-Semaphore,Exchanger 27.一篇文章,让你彻底弄懂生产者--消费者问题

    Java并发编程原理与实战

    JDK8的新增原子操作类LongAddr原理与使用.mp4 JDK8新增锁StampedLock详解.mp4 重排序问题.mp4 happens-before简单概述.mp4 锁的内存语义.mp4 volatile内存语义.mp4 final域的内存语义.mp4 实战:问题定位.mp4

    针对于Executor框架,Java API,线程共享数据

    Executor框架是Java并发编程中的一个重要工具,它提供了一种管理...原子操作在并发编程中具有重要的作用,可以保证多个线程对同一个变量的操作是线程安全的。 在两个线程之间共享数据,可以通过以下几种方式实现:

    并发编程面试专题.pdf

    7) 什么是原子操作,Java 中的原子操作是什么? 8) Java 中的 volatile 关键是什么作用?怎样使用它?在 Java 中它跟 synchronized 方法有什么不同? 9) 什么是竞争条件?你怎样发现和解决竞争? 10) 你将如何使用 ...

    python使用协程实现并发操作的方法详解

    本文实例讲述了python使用协程实现并发操作的方法。分享给大家供大家参考,具体如下: 协程 协程是一种用户态的轻量级线程,又称微线程。 协程拥有自己的寄存器上下文和栈,调度切换时,将寄存器上下文和栈保存到...

    Java 并发编程实战

    3.1.2 非原子的64位操作 3.1.3 加锁与可见性 3.1.4 Volatile变量 3.2 发布与逸出 3.3 线程封闭 3.3.1 Ad-hoc线程封闭 3.3.2 栈封闭 3.3.3 ThreadLocal类 3.4 不变性 3.4.1 Final域 3.4.2 示例:使用...

    并发编程笔记20190526.docx

    5、原子操作CAS (compare atomic swap) 32 三、显式锁和AQS 34 1、AQS定义两种资源共享方式: 34 2、深入源码 37 3、了解Condition的实现 42 4、 锁的可重入 44 第三章 并发容器ConcurrentHashMap 46 一、JDK1.7中...

    龙果java并发编程完整视频

    第56节JDK8的新增原子操作类LongAddr原理与使用00:17:45分钟 | 第57节JDK8新增锁StampedLock详解00:29:37分钟 | 第58节重排序问题00:23:19分钟 | 第59节happens-before简单概述00:15:17分钟 | 第60节锁的内存...

    JUC多线程学习个人笔记

    JUC提供了一些常用的并发编程模式和工具,如线程池、并发集合、原子操作等。 JUC的主要特点包括: 线程池:JUC提供了Executor框架,可以方便地创建和管理线程池,实现任务的异步执行和线程的复用。 并发集合:JUC...

    java并发编程

    第56节JDK8的新增原子操作类LongAddr原理与使用00:17:45分钟 | 第57节JDK8新增锁StampedLock详解00:29:37分钟 | 第58节重排序问题00:23:19分钟 | 第59节happens-before简单概述00:15:17分钟 | 第60节锁的内存...

    基于正点原子STM32F103ZET6开发板的例程,极其具有参考价值

    开启了系统滴答定时器SysTick_Handler函数,实现1毫秒级中断,可以精准的实现并发操作。 借鉴HAL库,使用SysTick_Handler实现Delay_ms延时,并修复HAL库延时函数不精确的BUG。 按键控制LED流水灯,控制BEEP。 USART1...

Global site tag (gtag.js) - Google Analytics