第一部分:并发理论基础12->面向对象思想写好并发程序
面向对象思想写并发程序
1. 封装共享变量
面向对象封装,
属性和实现细节封装在对象内部,外部通过公共方法简介访问内部属性
将共享变量作为对象属性封装在内部,对外公共方法制定并发访问策略
以计数器为例,共享变量value,将公共方法get和addOne声明为同步方法,这样就对共享变量的操作就变成了线程安全了
public class Counter {
private long value;
synchronized long get(){
return value;
}
synchronized long addOne(){
return ++value;
}
}
对于不会发生变化的共享变量,建议使用final修饰,性能还好。同时还能解决并发问题
2.识别共享变量间的约束条件
识别共享变量的约束条件很重要,约束条件,决定了并发访问策略
public class SafeWM {
// 库存上限
private final AtomicLong upper =
new AtomicLong(0);
// 库存下限
private final AtomicLong lower =
new AtomicLong(0);
// 设置库存上限
void setUpper(long v){
upper.set(v);
}
// 设置库存下限
void setLower(long v){
lower.set(v);
}
// 省略其他业务代码
}
库存下限要小于库存上限
3.指定并发访问策略
- 避免共享,避免共享的技术主要利用线程本地存储以及为每个任务分配独立的线程
- 不变模式:java里用的少,actor模式,csp模式
- 管程和其他同步工具,java领域万能解决方案是管程,但很多特定场景,java并发包里的读写锁,并发容器等同步工具更好
4.注意事项
- 优先使用成熟的工具类,java sdk并发包里提供了丰富的工具类,熟悉并掌握它们,而不是自己造轮子
2.迫不得已才使用低级的同步原语,synchronized,Lock,Semaphore等;这些虽然简单,实际上一定要小心使用
3.避免过早优化,安全第一,并发程序首先保证安全,出现性能瓶颈后再优化
5.总结
原创:做时间的朋友
分类:
java并发
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示