并发编程14-非阻塞同步机制

简介: <div class="markdown_views"><h4 id="锁带来的问题">锁带来的问题</h4><ul><li>会造成线程挂起</li><li>会造成线程调度开销</li><li>如果一个线程死锁会造成其它都不能执行</li></ul><h4 id="硬件并发锁">硬件并发锁</h4><p>现在的CPU提供了一些诸如测试并设置,比较并交换这样的

锁带来的问题

  • 会造成线程挂起
  • 会造成线程调度开销
  • 如果一个线程死锁会造成其它都不能执行

硬件并发锁

现在的CPU提供了一些诸如测试并设置,比较并交换这样的原子操作指令,为我们的乐观锁提供了支持。

比较并交换 CAS
int oldvalue = v;
if(v == expertedValue) v = newValue;
return oldvalue; 

通常的用法是,取出v然后进行一定的操作,通过CAS会写值。如:

public int increment(){
    int v;
    do{
        v = cas.getValue();
    }while(v != cas.compareAndSwap(v, v+1));
    return v + 1;
JVM的支持

Java提供了一些原子类,能够把其中的方法改为硬件底层的锁机制, 如果不能则会使用自旋锁的方式,来完成这个功能。

ABA问题

http://hustpawpaw.blog.163.com/blog/static/184228324201210811243127/

相关文章
|
Java 索引
多线程和并发编程(2)—CAS和Atomic实现的非阻塞同步
多线程和并发编程(2)—CAS和Atomic实现的非阻塞同步
88 1
多线程和并发编程(2)—CAS和Atomic实现的非阻塞同步
|
3月前
|
Java
多线程线程同步
多线程的锁有几种方式
|
3月前
|
安全 Java
深入Java并发编程:线程同步与互斥机制
在多线程编程中,确保数据一致性与避免竞态条件至关重要。Java提供了多种同步机制,如`synchronized`关键字、显式锁(如`ReentrantLock`)和原子变量(如`AtomicInteger`)。这些工具帮助解决并发问题,例如竞态条件(依赖线程执行顺序的问题)、死锁(线程互相等待对方持有的资源)和活锁(线程反复响应对方行为而无法进展)。合理运用这些机制可有效管理并发,确保程序稳定运行。
75 0
|
3月前
|
Java C语言 C++
并发编程进阶:线程同步与互斥
并发编程进阶:线程同步与互斥
41 0
|
5月前
|
安全 Java 开发者
Java并发编程:理解并发与多线程
在当今软件开发领域,Java作为一种广泛应用的编程语言,其并发编程能力显得尤为重要。本文将深入探讨Java中的并发编程概念,包括多线程基础、线程安全、并发工具类等内容,帮助开发者更好地理解和应用Java中的并发特性。
29 1
|
6月前
|
存储 消息中间件 缓存
并发编程 - 通过 Disruptor 来实现无锁无阻塞的并发编程
并发编程 - 通过 Disruptor 来实现无锁无阻塞的并发编程
376 1
|
前端开发 JavaScript
【多线程】多线程异步
【多线程】多线程异步
67 0
|
安全 Java
Java并发编程:探索多线程和同步
在现代软件开发中,高性能和并发是至关重要的。Java作为一种强大的编程语言,提供了丰富的工具来实现并发编程。本文将介绍一些Java中与并发相关的技术和概念,并探讨如何使用它们来构建高效的多线程应用程序。
299 0
【并发编程】线程间的通信
【并发编程】线程间的通信