并发编程(九):如何写好并发程序

1.封装共享变量

  1. 将共享变量作为对象属性封装在内部,对所有公共方法制定并发访问策略

    封装共享变量其实指的就是将共享变量封装在内部,只暴露几个公共的方法允许外部访问该共享变量,写代码时在针对这些访问路径进行严格的控制访问。

  2. 对于不会发生改变的共享变量,可以采取final进行修饰

2.识别共享变量间的约束条件

  1. 约束条件往往会出现在if语句中,例如某某参数大于某某参数等,因此我们需要能够识别出约束条件来避免出现竞态条件
  2. 并发策略往往就是由这些约束条件来决定的

3.制定并发访问策略

方案如下:

  1. 避免共享:实现避免共享,主要是利用线程本地存储(ThreadLocal)以及为每个任务分配独立的线程
  2. 不变模式:这个在 Java 领域应用的很少,但在其他领域却有着广泛的应用,例如 Actor 模式、CSP 模式以及函数式编程的基础都是不变模式
  3. 管程及其他同步工具:Java领域万能的解决方案是管程(synchronized、wait()、notify()、notifyAll()),但是对于很多特定场景,使用 Java 并发包提供的读写锁、并发容器等同步工具会更好

写好并发程序的宏观原则:

  1. 优先使用成熟的工具类:Java SDK 并发包里提供了丰富的工具类,基本上能满足你日常的需要,建议你熟悉它们,用好它们
  2. 迫不得已时才使用低级的同步原语:低级的同步原语主要是指synchronized、Lock、Semaphore(信号量),这些虽然简单,但却需要小心使用
  3. 避免过早优化:先确定程序是安全的,再去想优化

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×