1.线程安全
所谓线程安全是指一个类(对象或者方法)在多个线程访问情况下,始终表现出正常的行为,那么这个类(对象或者方法)就被称之为线程安全
2.synchronized
synchronized取得的锁都是对象锁,而不是把一段代码(方法)当做锁。限制性synchronizeed关键字的方法,先持有该方法所属的对象的锁,两个对象,线程上获得两个不同的锁,互不影响。 有一种情况是相同锁,即静态方法加synchronized关键字,表示锁定class类,类一级别的锁独占.class类
3.在我们对一个对象方法枷锁的时候,要考虑业务的整体性,即为 setValue/getValue 方法同时加锁,保证业务的整体原子性
4.关键字synchronized有锁重入功能,也就是在使用synchronized关键字时,当一个线程获得了一个对象的锁后,再次请求此对象时可以获得该对象的锁(参见我的另一篇博客子类继承父类,重写父类的synchronized方法,两个synchronized方法的锁对象的问题)
5.对于web程序,异常释放锁的情况,如果不及时处理,可能会对程序业务逻辑产生错误。
比如现在执行一个队列任务,很多对象都去第一个对象正确执行完毕再去释放锁,但第一个对象执行带锁的方法时产生了异常,导致业务逻辑没有正常执行完毕,就释放了锁。后续对象执行都是错误逻辑
6.volatile
使变量在多个线程间可见,不具备原子性(使用Automic型数据结构)
tips:具体见我的另一篇博客 Java多线程之内存可见性和原子性:Synchronized和Volatile的比较
7.线程通信
https://blog.csdn.net/jisuanji12306/article/details/86363390讲的很详细
6.join方法
https://blog.csdn.net/u013425438/article/details/80205693
7.线程池类型
https://www.cnblogs.com/yh2two/p/11753816.html