线程安全
当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么这个类就是线程安全的。
锁重入
一个线程获得一个对象锁后,再次请求此对象锁时是可以再次得到该对象的锁的。换句话说,在synchronized方法内部可以调用本类的其他synchronized方法,是可以得到锁的。出现异常时,锁释放。
- 不要对 String 的常量加锁,会出现死循环问题。
无锁
CAS算法
一个CAS方法包含三个参数CAS(V,E,N)。V表示要更新的变量,E表示预期的值,N表示新值。只有当V的值等于E时,才会将V的值修改为N。如果V的值不等于E,说明已经被其他线程修改了,当前线程可以放弃此操作,也可以再次尝试次操作直至修改成功。基于这样的算法,CAS操作即使没有锁,也可以发现其他线程对当前线程的干扰(临界区值的修改),并进行恰当的处理。