`
zhaoyanfangeye
  • 浏览: 124885 次
  • 性别: 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操作的原子性。分享出来大家参考。

    STM32的串口变量的原子操作问题

    ### STM32串口变量的原子操作问题详解 #### 一、问题背景及描述 在进行STM32单片机的串口通信开发过程中,可能会遇到串口数据帧丢失的问题。这种现象通常表现为:尽管串口接收到了完整的数据包(如512个字节或1024...

    Linux驱动并发控制之位原子操作.pdf

    位原子操作是利用位操作来实现并发控制的方法。它通过对位的操作来实现对共享资源的访问控制。在 Linux 驱动中,位原子操作是实现并发控制的常用方法之一。 二、常用的位原子操作函数 在 Linux 驱动中,常用的位...

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

    本文将深入探讨Java开发中的原子操作实现原理,以及如何利用这些知识来优化Java应用。 首先,我们需要理解什么是原子操作。原子操作是指不可分割的操作,它要么全部完成,要么完全不执行,中间不会被其他线程中断。...

    并发编程——原子操作CAS.pdf

    本文档详细介绍了并发编程中的原子操作,特别是Java语言中通过CAS(Compare-And-Swap)实现的原子操作,并指出了在实际编程中如何使用和实现原子操作。 首先,文档开篇就介绍了原子操作的定义。所谓原子操作,指的...

    java多线程中的原子操作

    在Java多线程编程中,原子操作是一种非常关键的概念,它涉及到并发控制和线程安全。原子操作是指在不被其他线程中断的情况下,能够完整执行的一个或一系列操作。这样的操作在多线程环境中可以保证数据的一致性和完整...

    kotlinx.atomicfu,在kotlin中使用原子操作的惯用方法.zip

    4. **原子操作的使用场景**: 在并发编程中,原子操作通常用于实现计数器、信号量、队列等数据结构,或者在状态机中更新状态。它们能避免锁的使用,减少竞态条件,提高程序的性能和可扩展性。 5. **线程安全与并发...

    windows c++ 原子操作例子

    Windows API提供了一些原语函数来支持原子操作,这些函数在底层通过处理器的特殊指令实现,如x86架构中的LOCK前缀指令。 本文将详细介绍如何在Windows C++中使用原子操作,并通过一个简单的测试案例进行演示。 1. ...

    zynq的linux驱动5-使用原子操作实现mio资源的竞争保护

    标题“zynq的linux驱动5-使用原子操作实现mio资源的竞争保护”表明我们将讨论如何通过使用原子操作来防止MIO(Multipurpose Input/Output)资源在多个进程间的竞争条件。描述进一步强调了目标,即在同一时刻只允许一...

    C语言中的原子操作:原理、实现与性能优化

    原子操作是并发编程中确保数据一致性和线程安全的重要技术。在C语言中,可以通过内存屏障、原子操作函数和锁机制来实现原子操作。然而,过度使用原子操作可能会影响性能,因此需要合理使用并结合性能优化策略。通过...

    Java中的原子操作:深入探索AtomicInteger的实现与应用

    AtomicInteger 是Java并发编程中实现原子操作的重要工具。它通过 Unsafe 类提供的硬件级别的原子操作和 volatile 关键字保证了操作的原子性和可见性。在实际开发中,我们应该根据具体的应用场景选择合适的同步机制。...

    原子操作、信号量、读写信号量和自旋锁的API

    原子操作的API主要定义在`include/asm/atomic.h`文件中,这些API通常用汇编语言实现,因为C语言本身无法直接支持原子性操作。以下是常用的几个原子操作API: 1. **atomic_read(atomic_t *v)**:读取原子变量`v`的值...

    3、并发编程之CAS&Atomic原子操作详解.pdf

    ### 并发编程之CAS与Atomic原子操作详解 #### 一、原子操作的概念与意义 在计算机科学领域,原子操作是指一系列的操作被视为一个整体,在执行过程中不会被其他进程或线程打断的操作。简而言之,它确保了一系列操作...

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

    在文件“atom_opt.h”中,我们可以看到相关的原子操作实现。 无锁队列(Lock-Free Queue)是一种利用CAS操作实现的并发队列,它不需要使用锁来保证线程安全。这种队列的两个主要设计目标是高效和线程安全。在文件...

    Java并发机制的底层实现原理.pdf

    缓存锁则通过缓存一致性协议,比如MESI协议,来确保多个处理器之间的缓存数据一致性,从而实现原子操作。缓存锁不使用LOCK#信号,而是直接在缓存内部进行控制,减少了总线带宽的压力。 Java通过synchronized和...

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

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

    一文读懂原子操作、内存屏障、锁(偏向锁、轻量级锁、重量级锁、自旋锁)、Disruptor、Go Context之上半部分.doc

    Disruptor 框架是一个高性能的并发框架,使用原子操作和锁机制来实现高效的并发处理。Disruptor 框架使用 RingBuffer 数据结构来实现高效的并发处理。 六、Go 语言中的 Context Go 语言中的 Context 是一个高级的...

    C++ 11 开发中的 Atomic 原子操作.rar_C++11、原子_atomic c++_c++ atomic使用_c++

    原子操作在并发环境下确保了数据的完整性,防止了数据竞争和其他并发问题。下面将详细介绍C++11中`std::atomic`的相关知识点。 1. **原子类型(Atomic Types)** C++11定义了一个`std::atomic`模板类,用于创建...

    实现Java高并发隔离 模拟

    5. **原子变量(Atomic Variables)**:`java.util.concurrent.atomic`包提供了原子变量类,如`AtomicInteger`、`AtomicLong`等,它们支持原子操作,无需锁即可实现线程安全。 6. **并发容器(Concurrent ...

Global site tag (gtag.js) - Google Analytics