对象是过程的抽象,线程是调度的抽象。
1、并发防御原则
(1)单一权责原则
分离并发相关代码
(2)限制数据作用域
封装数据,严格限制对可能被共享的数据的访问
(3)使用数据复本
假设使用对象复本能避免代码同步执行,因而避免了锁定而省下的价值有可能补偿得上额外的创建成本和垃圾收集开销。
(4)线程尽可能独立
将数据分解到可被独立线程操作的独立子集上。
2、执行模型
(1)生产者-消费者模型
一个或多个生产者线程创建某些工作,并置于缓存或队列中。一个或多个消费者线程从队列中获取并完成这些工作。生产者和消费者之间的队列是一种限定资源。
(2)读者-作者模型
更新时会影响吞吐量
(3)宴席哲学家
哲学家就餐问题
3、不要将系统错误归咎于偶发事件
偶发事件被忽略得越久,代码就越有可能搭建于不完善的基础之上
4、装置试错代码
(1)运行多于处理器数量的线程
任务交换越频繁,就越有可能找到错过临界区或导致死锁的代码
(2)硬编码
增加对wait,sleep,yield等的调用
(3)自动化
采用AOP自动化装置