表示泄露:
1. 类的属性参数要保证外部类不可访问,否则可以修改,如果不存在需要修改的需求,则将属性参数定义为private final
2. 在遇到get函数时,需要注意不能直接返回类中参数的直接引用,否则外部调用get函数后,即可更改本来的类里面的变量,应该用return new该变量类型的形式进行返回
3.在遇到set函数时,也需要注意2中提到的点,因为如果一个调用set后,便更改了原有的参数值,导致原有的参数值丢失。
关于线程安全:
1.限制数据共享,尽量不要共享数据
2.如果一定要共享,共享不可变数据类型
3.如果一定要共享可变类型数据,则用线程安全的可变数据
4. 即使用线程安全的可变数据类型也不能保证线程安全,例如list中调用remove函数和判断是否为空的函数,就会出现交错的现象,这个时候可以给需要保证单线程的部分上锁
这里要注意的是 如果要两个部分先后进行,必须要要给这两个部分上相同的锁,否则也是线程不安全的。
原文:https://www.cnblogs.com/benecho/p/13285542.html