Synchronized回顾(线程安全问题)
同步代码块
代码示例
synchronized(同步监视器){
//需要被同步的代码
}
说明
1.需要被同步的代码,操作共享数据的代码
2.共享数据:多个线程共同操作的数据,比如,ticket;
3.同步监视器,俗称锁。要求:①任何一个类的对象都可以充当同步监视器;②多个线程必须共用同一个同步监视器
同步方法
如果操作共享数据的代码,完整的声明在了某一个方法内,我们可以考虑将此方法声明为公共方法
非静态的方法,如果声明为同步方法,此时默认的同步监视器是this
静态方法,如果声明为同步方法,此时默认的同步监视器是,当前类本身
Lock
JDK5.0新增
使用Lock锁方式,解决实现问题中的线程安全问题
synchronized与Lock锁的区别
1)synchronized涉及到同步监视器,要求多个线程共用唯一的同步监视器
当执行语句结束synchronized对应的一对{}以后,会自动的释放同步监视器,使得其他线程可以操作共享数据
2)Lock锁,提供具体的Lock锁的实现类对象,此对象需要多个线程共享
必须手动调用unlock()方法,才能结束对共享数据的操作,使得其他线程可以操作共享数据