迭进
1、通过迭进设计达到整洁目的
运行所有测试
不可重复
表达了程序员的意图
尽可能的减少类和方法的数量
以上规则按照其重要程度排序
递增式的重构代码,测试消除了对清理代码就会破坏代码的恐惧
尽可能少的类和方法
并发编程
关于并发编程的中肯说法
并发会在性能和额外代码上增加一些开销
正确的并发是复杂的,即便对于简单的问题也是如此
并发缺陷并非总能,所以总被看做偶发事件而忽略,未被当作真的缺陷看待
并发常常需要对设计策略的根本性修改
并发防御的原则
a、单一职责原则
并发相关的代码有自己的开发、修改和调优的生命周期
并发相关的代码有自己要对付的挑战,和非并发相关代码不同 而且更难
即使没有周边应用程序的负担,写的不好的并发代码可能出错方式的数量也很大
建议:分离并发相关代码和其他代码
b、推论 限制数据的作用域
c、推论:使用数据副本
避免共享数据的好方法之一就是一开始就避免共享数据,某种方式下可能复制对象并以只读方式对待,再另外的情况下,可能复制对象,对多个线程中的复本进行收集,并在单个线程中合并这些结果。
d、推论:线程应该尽可能的独立
建议:尝试将数据分解到可能独立的线程操作的独立子类
e、线程执行模型
生产者-消费者模型
读者-作者模型
宴席哲学家 哲学家就餐问题
f、警惕同步方法之间的依赖
g、保持同步区域微小
测试线程代码的建议
a、将伪失败看作可能的线程问题
不要将系统的错误归咎于偶发事件
b、先使非线程代码可工作
不要同时追踪非线程缺陷和线程缺陷,确保代码在线程之外可以工作
c、编写可插拔的线程代码
d、编写可调整的线程代码
要获得良好的线程平衡,常常需要试错。
e、运行多于处理器数量的线程
f、在不同的平台上运行
尽早并经常的在所有的目标平台上运行线程代码
g、装置试错代码
装置Object.wait Object.sleep Object.yield Object.priority等方法的调用 改变代码的执行顺序
有两种装置代码的方法 硬编码和自动化
自动化是使用异动策略搜出错误
方法:通过aop或者cglib或者asm之类的工具,或者contest工具等
来源:https://blog.csdn.net/yan88888888888888888/article/details/102717360