Synchronized关键字整理
Synchronized关键字整理 作用:能够保证在同一时刻最多只有一个线程执行该段代码,以达到保证并发安全效果。 两个用法: 1 、对象锁: 包括 方法锁 ( 默认锁对象为this当前实例对象 )和 同步代码块锁 ( 自己指定锁对象 )。 2 、类锁: 指synchronized修饰 静态 的方法或指定锁为 Class对象。 概念: l 只有一个Class对象:Java类可能有多个java对象,但只有一个Class对象。 l 本质:所谓的类锁,不过是Class对象锁而已。 l 用法和效果:类锁只能在同一时刻被一个对象拥有。 性质: 可重入 : l 概念: 指同一线程的外层函数获得锁之后,内层函数可以直接再次获取该锁 l 好处:避免死锁、提升封装性。 l 粒度: 是线程范围 而非调用范围。 l 原理:加锁次数计数器。线程第一次给对象加锁时,设为1,。每当该线程在此对象上再次获得锁时,计数递增。当任务离开时,计数递减,为0时,完全释放锁。 不可中断 缺陷: l 效率低:锁的释放情况少、试图获得锁时不能设定超时、不能中断一个正在试图获得锁的线程。 l 不够灵活(读写锁更灵活):加锁和释放的时机单一,每个锁仅有单一的条件(某个对象),可能是不够的。 l 无法知道是否成功获取到锁。 多线程访问同步方法的7种情况: 两个线程同时访问一个对象的同步方法。(同步)