前两天听到有同事抱怨有人的代码中使用and属性名(属性值)
的方式创建对象,很不方便,还是提供属性的Getter
/Setter
方法更好些,听到他这样抱怨的时候我还花了点时间给他讲了采用这种方式创建对象的好处——这种对象创建的方式是为了保护对象在创建之后就不允许被更改。同时也想到这么好的设计模式时很值得学习的,且做个记录。
ThreadLocal剖析
ThrealLocal顾名思义是提供在当前线程内存中增加并操作对象的一个工具类,也即是对当前线程内存空间的一个掌控,它可以保证访问到的变量属于当前线程,每个线程都保存有一个变量副本,每个线程的变量都不同,而同一个线程在任何时候访问这个本地变量的结果都是一致的。ThreadLocal相当于提供了一种线程隔离,将变量与线程相绑定[1]。对象的绑定或者隐射很容易就让人想到这事Map类型的操作,ThreadLocal中的确对象的绑定是通过map的方式,只不过并没有直接使用到jdk中常用Map的实现。通过阅读源码,让我再一次重温了引用(Reference)[2]相关的知识。
盘点一下JDK中的那些工具类-Arrays
java.util.Arrays
工具类是对集合操作的工具集合,其中包含的工具主要有排序,查找,比较,填充,拷贝,计算Hash值,集合转字符串,枚举,以及集合转流。作为一个工具类,它的构造方法为私有,这样就避免了工具方法被用户实例化的尴尬,同时,它的工具方法都是公开的静态方法。
Object中的wait/notify
Java中的基类Object中,有 notify()
, notifyAll()
, wait(long)
, wait(long, int)
, wait()
方法,在非Thread类型中,可以通过这些方法实现多线程之间的通信和互斥。