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

相关文章
|
18天前
|
人工智能 JavaScript 前端开发
实战使用 Qwen3-coder 低代码开发 HTML 个人网站
阿里巴巴开源的Qwen3-coder模型,凭借强大性能和低代码能力,助力用户快速搭建个人网站。本文详解环境配置、提示词设计与部署流程,适合编程新手快速上手,掌握AI辅助开发技能。
1209 8
|
3天前
|
自然语言处理 前端开发 JavaScript
js异步
js异步
195 108