编程规范
- 当需要精确结果时,不要使用float或者double。如果对性能没有要求,那么可以直接使用BigDecimal,如果对性能有要求,那么自己进行小数和整数部分的记录。
- 基本类型优先于装箱类型。装箱类型不具有同一性,使用==比较几乎总是会发生错误。装箱类型没有默认初始值。自动装箱和拆箱对性能有很大的损失。
- 能避免使用字符串的时候尽量不使用。
- 尽量少使用字符串连接。连接n个字符串需要耗费n的平方级的时间,所以尽量使用StringBuild。
- 通过接口引用对象。通过具体的类来引用对象对程序以后的更改极为不利。
- 不要努力去编写快的程序,要努力编写好的程序。如果一个程序的架构够好,那么以后有很多优化的余地。
异常处理
- 应抛出与抽象相对应的异常。也就是说,在低级别处理的异常抛出到高级别时需要进行异常的转义。
- 不要忽略异常!(最简单,也最重要)
同步异步
- 避免过度同步。同步方法过多会降低程序的性能,将同步块尽量最小化。
- executor和task优先于线程。
- 并发工具优先于wait和notify
- double check locking: 双重检查锁。对volatile对象进行双重的检查,保证锁的时间延后而保持对象的正确,应用于很多地方,如:tomcat,spring延迟加载等等。例子:
- public class LazySingleton {
- private static volatile LazySingleton instance;
- public static LazySingleton getInstantce() {
- if (instance == null ) {
- synchronized (LazySingleton.class ) {
- if (instance == null ) {
- instance = new LazySingleton();
- }
- }
- }
- return instance;
- }
- }
- 不要依赖于线程调度器。因为线程调度器是操作系统级的实现,每个操作系统也许都会有不一样的算法,过度依赖于线程调度器大大的降低了程序的可移植性。线程优先级是java平台最不可移植的特征。
- 避免使用线程组。
0 条评论