线程安全-非阻塞同步

线程安全-非阻塞同步

阻塞同步:互斥同步存在的问题时 进行 线程阻塞 和 唤醒所带来的 性能问题, 这种同步称为 阻塞同步(Blocking Synchronization)

这是一种悲观并发策略

非阻塞同步:

不同于 悲观并发策略, 而是使用基于 冲突检测的 乐观并发策略, 就是先进行操作

如果没有其他线程征用共享数据, 则操作成功; 否则就是产生了冲突

采取不断重试直到成功为止的策略, 这种策略不需要把 线程挂起, 称为 非阻塞同步

使用硬件处理器指令 进行不断重试策略(JDK1.5以后)

  • 测试并设置(Test-and-Set)

  • 获取并增加(Fetch-and-Increment)

  • 交换(swap)

  • 比较并交换(Compare-and-Swap, 简称CAS)

  • 加载链接, 条件存储(Load-Linked, Store-conditional, 简称LL, SC)

    例: Java实现类AtomicInteger, AtomicDouble等等

用 AtomicInteger来改进

class Counter {
    private AtomicInteger count = new AtomicInteger();
    public void increment() {
        count.incrementAndGet();
    }
    
    // 使用AtomicInteger之后, 不需要加锁, 也可以实现线程安全
    public int getCount() {
        return count.get();
    }
}

参考链接

https://www.xuetangx.com/learn/THU08091000252/THU08091000252/7754101/video/12732939

posted on 2021-11-06 16:05  beyondx  阅读(61)  评论(0编辑  收藏  举报

导航