无状态对象(既不包含任何域,也不包含任何其他类中域的引用)一定是线程安全的。

Final

fianl域是不能修改的(但如果final域所引用的对象是可变的,那么这些被引用的对象是可变的)

除非需要可变域,否则应将其声明位final域。 

初始化:

	final int i = 0;	//在声明时就初始常量的值(每个对象的fianl常量都为一个值)

	public class Test{	//声明时未初始化,如果常量不通过构造方法或块初始化会报错

		final int i;

		{
i=1; //不可以再在构造函数里初始化i的值,因为块已经把常量初始化了(每个对象的fianl常量都为一个值)
} Test(){
i=1; //通过构造方法初始化(如果有参构造器,每个对象的fianl常量可以是不同值)
}
} public class Test{ //静态类中初始化(每个对象的fianl常量都为一个值) static final int i; static{
i=1;
}
}

可重入锁:为了避免死锁

当一个线程获取对象锁,需要再次获取这个对象锁:

	1. 一个对象中有多个同步方法

	2. 子类重写父类同步方法:

		super不是指父类对象,而是一个引用,引用从父类继承来的方法。

		super.父类方法,通过super引用调用从父类继承来的方法,锁对象仍然是子类对象。

public class aaa{
public static void main(String[] args) {
ccc ccc = new ccc();
ccc.dothing();
}
} class bbb{
public void dothing(){
System.out.println("父类:"+this.toString());
}
} class ccc extends bbb{
@Override
public void dothing() {
super.dothing();
System.out.println("super:"+super.toString());
System.out.println("子类:"+this.toString());
}
} 输出:
父类:ccc@62043840
super:ccc@62043840
子类:ccc@62043840

安全发布

不安全发布(多线程问题):

	public Holder holder;

	public void init() {
holder = new Holder(42);
} 由于可见性问题,其他线程看到的Holder对象可能处于不一致状态。 安全发布(保证可见性): 静态初始化器中初始化对象引用(public static Holder holder = new Holder(24);):最简单,最安全 将对象引用保存在volatile域或者AtomicReferance对象中 对象引用保存在final域中 对象引用保存在由锁保护的域中 安全发布容器:
ConcurrentMap
CopyOnWriteArrayList
BlockingQueue 可变对象:
不仅需要安全发布,并且必须是线程安全的。 解决:
线程封闭:ThreadLocal
只读共享:CopyOnWriteArrayList 和 CopyOnWriteArraySet
同步:synchronizer
保护对象:AtomicReferance

最新文章

  1. Java当中的反射
  2. Zabbix日志监视的汇总报警(更新发送邮件脚本)
  3. 数据处理/OLAP/OLTP
  4. yii压缩
  5. nodejs:csv模块解析
  6. iOS之手势滑动返回功能-b
  7. JS 拼凑字符串
  8. 简单水池&&迷宫问题
  9. 脚本化css
  10. Qt读取ANSI格式文件——利用QTextCodec将其他编码格式的QByteArray转换为Unicode格式,或者从文件中读出后直接做转换
  11. Android自适应不同屏幕几种方法
  12. 发布时去掉 debug 和 提醒日志,简单无侵入
  13. javascript入门篇(四)
  14. 设计模式系列6:适配器模式(Adapter Pattern)
  15. 【编辑器】Visual Studio Code
  16. 关于jquery中on绑定click事件在苹果手机失效的问题
  17. [Winform]通过钩子监控键盘操作和鼠标移动
  18. HTML5 Storage(永久存储)
  19. MyEclipse自带且常用的快捷键和自己定义的快捷键方法步骤
  20. Mockito: InvalidUseOfMatchersException

热门文章

  1. 生成器模式Builder
  2. Eu
  3. Java 设计模式-【单例模式】
  4. Android 架构师技能图谱
  5. python re模块常用的正则表达式
  6. MySQL高级学习笔记(六):MySql锁机制
  7. phhstrom 快捷键
  8. 二级域名解析设置及Apache 子域名配置
  9. ACM-ICPC 比赛环境的使用
  10. 部署项目问题(maven打包jar不对应,导致启动时一直找不到某个类)