避免过度同步(67):在一个被同步的方法或代码块中,不要调用哪些被设计成被覆盖的方法或者是由客户端以函数对象的形式提供的方法(21). 有点拗口,书上提供的创建者与观察者模式,add方法太多,看得眼花缭乱,重新写了一个例子: package com.example.demo.effective; public interface Believer { void confide(); } package com.example.demo.effective; import com.google.c…
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所以JDK 最好下载 JDK 9以上的版本. 并发 线程允许多个活动同时进行. 并发编程比单线程编程更难,因为更多的事情可能会出错,并且失败很难重现. 你无法避免并发. 它是平台中固有的,也是要从多核处理器获得良好性能的要求,现在无处不在.本章包含的建议可帮助你编写清晰,正确,文档完备的并发程序. 7…
背景: 在Java编程过程中,如果打开了外部资源(文件.数据库连接.网络连接等),我们必须在这些外部资源使用完毕后,手动关闭它们.因为外部资源不由JVM管理,无法享用JVM的垃圾回收机制,如果我们不在编程时确保在正确的时机关闭外部资源,就会导致外部资源泄露,紧接着就会出现文件被异常占用,数据库连接过多导致连接池溢出等诸多很严重的问题. 传统关闭资源方式(一般JDK版本低于1.7) /** * 根据路径创建文件,如果路径文件夹不存在,就创建 * @param filePath * @return…
异常转译:当位于最上层的子系统不需要关心底层的异常细节时,常见的作法时捕获原始异常,把它转换一个新的不同类型的异常,在将新异常抛出. 通常方法捕获底层异常,然后抛高层异常. public static long write2File(String dataStr, String filePath) { long fileSize = 0L; try ( RandomAccessFile raf = new RandomAccessFile(createFileAbsolute(filePath)…
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所以JDK 最好下载 JDK 9以上的版本. 89. 对于实例控制,枚举类型优于READRESOLVE 条目 3描述了单例(Singleton)模式,并给出了以下示例的单例类. 此类限制对其构造方法的访问,以确保只创建一个实例: public class Elvis { public static f…
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所以JDK 最好下载 JDK 9以上的版本. 79. 避免过度同步 条目 78警告我们缺乏同步的危险性.这一条目则涉及相反的问题.根据不同的情况,过度的同步可能导致性能下降.死锁甚至不确定性行为. 为了避免活性失败和安全性失败,永远不要在同步方法或代码块中将控制权交给客户端.换句话说,在同步区域内,不…
78.  同步访问共享的可变数据 为了在线程之间进行可靠的通信,也为了互斥访问,同步是必要的. 不共享可变的数据.要么共享不可变的数据,要么压根不共享.换句话说,将可变数据限制在单线程中. 当多个线程共享可变数据的时候,每个读或写数据的线程必须执行同步.如果没有同步就无法保证一个线程所做的修改被另一个线程获知.如果只需要线程间的交互通信而不需要互斥,volatile是一种可以接受的同步形式.   这个在工作中也需要注意,在学习完多线程编程之后更好理解. 79.  避免过度同步 过度同步可能会导致…
Effective Java通俗理解(上) 第31条:用实例域代替序数 枚举类型有一个ordinal方法,它范围该常量的序数从0开始,不建议使用这个方法,因为这不能很好地对枚举进行维护,正确应该是利用实例域,例如: 1 /** 2 * 枚举类型错误码 3 * Created by yulinfeng on 8/20/17. 4 */ 5 public enum ErrorCode { 6 FAILURE(0), 7 SUCCESS(1); 8 9 private final int code;…
<Effective Java(中文第二版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382186 Java(中文第二版)>[PDF]"  TITLE="<Effective Java(中文第二版)>[PDF]" /> 编辑推荐 <Sun 公司核心技术丛书:EffectiveJava中文版(第2版)>内容全面,结构清晰,讲解详细.可作为技术人员的参考用书.编码平添乐…
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java…