《Effective Java》读后感(四)

编程规范

  • 当需要精确结果时,不要使用float或者double。如果对性能没有要求,那么可以直接使用BigDecimal,如果对性能有要求,那么自己进行小数和整数部分的记录。
  • 基本类型优先于装箱类型。装箱类型不具有同一性,使用==比较几乎总是会发生错误。装箱类型没有默认初始值。自动装箱和拆箱对性能有很大的损失。
  • 能避免使用字符串的时候尽量不使用。
  • 尽量少使用字符串连接。连接n个字符串需要耗费n的平方级的时间,所以尽量使用StringBuild。
  • 通过接口引用对象。通过具体的类来引用对象对程序以后的更改极为不利。
  • 不要努力去编写快的程序,要努力编写好的程序。如果一个程序的架构够好,那么以后有很多优化的余地。

异常处理

  • 应抛出与抽象相对应的异常。也就是说,在低级别处理的异常抛出到高级别时需要进行异常的转义。
  • 不要忽略异常!(最简单,也最重要)

同步异步

  • 避免过度同步。同步方法过多会降低程序的性能,将同步块尽量最小化。
  • executor和task优先于线程。
  • 并发工具优先于wait和notify
  • double check locking: 双重检查锁。对volatile对象进行双重的检查,保证锁的时间延后而保持对象的正确,应用于很多地方,如:tomcat,spring延迟加载等等。例子:
    1. public class LazySingleton {  
    2.     private static volatile LazySingleton instance;  
    3.       
    4.     public static LazySingleton getInstantce() {  
    5.         if  (instance == null ) {  
    6.             synchronized (LazySingleton.class ) {  
    7.                 if  (instance == null ) {  
    8.                     instance = new LazySingleton();  
    9.                 }  
    10.             }  
    11.         }  
    12.         return instance;  
    13.     }  
  • 不要依赖于线程调度器。因为线程调度器是操作系统级的实现,每个操作系统也许都会有不一样的算法,过度依赖于线程调度器大大的降低了程序的可移植性。线程优先级是java平台最不可移植的特征。
  • 避免使用线程组。

你可能感兴趣的:(java,java,编程,读书笔记,effective,读后感)