并发编程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/

相关文章
|
2月前
|
安全 Java
深入Java并发编程:线程同步与互斥机制
【4月更文挑战第6天】Java并发编程中,确保数据一致性与防止条件竞争是关键。语言提供`synchronized`关键字、`Lock`接口和原子变量等机制处理并发问题。线程同步问题包括竞态条件、死锁和活锁。`synchronized`实现内置锁,`Lock`接口提供更灵活的锁管理,原子变量则支持无锁安全操作。理解并恰当使用这些工具能有效管理并发,避免数据不一致。
|
10月前
|
Java 索引
多线程和并发编程(2)—CAS和Atomic实现的非阻塞同步
多线程和并发编程(2)—CAS和Atomic实现的非阻塞同步
57 1
多线程和并发编程(2)—CAS和Atomic实现的非阻塞同步
|
2月前
|
Web App开发 IDE Java
什么是多线程
什么是多线程
25 3
|
10月前
65.【 多线程2】(四)
65.【 多线程2】
31 0
|
2月前
|
存储 消息中间件 缓存
并发编程 - 通过 Disruptor 来实现无锁无阻塞的并发编程
并发编程 - 通过 Disruptor 来实现无锁无阻塞的并发编程
138 1
|
存储 安全 Java
多线程1
多线程1-https://www.nowcoder.com/issue/tutorial?tutorialId=94&uuid=4e79fb9392af4f90b898311e8c1efe36
53 0
【并发编程】线程间的通信
【并发编程】线程间的通信
|
安全 程序员 C++
C++之多线程(二)
C++进阶之多线程下
76 0