线程安全是什么
由于JVM设计中线程执行是抢占式的,所以会造成多个线程修改一个数据不同步的问题。
例如两个人同时取一个账户里面的钱,账户中有100块,两个人都取70块,会造成账户出现负数情况。
线程安全三种解决方式
- 同步代码块
- 同步方法
- 同步锁
同步代码块
synchronized(obj){
...
//此处代码就是同步代码
//obj是要锁定的类
}
同步方法
synchronized function(){
...
//此处代码就是同步代码
}
同步锁
private final ReentrantLock look=new ReentrantLock();
public void function(){
//加锁
look.lock();
try {
//执行代码块
}
}finally {
//释放锁
look.unlock();
}
}
具体分析参考:https://blog.csdn.net/nightcurtis/article/details/78532818