线程安全-非阻塞同步
线程安全-非阻塞同步
阻塞同步:互斥同步存在的问题时 进行 线程阻塞 和 唤醒所带来的 性能问题, 这种同步称为 阻塞同步(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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律