线程安全

2019-04-02  本文已影响0人  司鑫

1. 为什么会发生线程安全问题

当多个线程在共享同一个全局变量或静态变量,并对这个变量同时写入的时候,可能会发什么数据冲突问题,这就是线程安全问题。

2. 解决方式

可以使用线程之间同步 synchronized 或 lock 锁来解决这个问题。导致这个问题是因为多个线程共享同一个变量时,在某代码块中会可能存在都在写入的操作。那么synchronized 和lock 原理都是只允许一个线程进入到这个代码块,操作完后释放,然后再让下一个线程进入。

3. 内置锁:synchronized

内置锁也称为互斥锁:即线程A获取到锁后,线程B阻塞,直到线程A释放掉锁,线程B才能获取到这个锁。

同步方法

在方法上修饰 synchronized称为同步方法。

就是将可能会发生线程安全问题的代码,给包括起来。
synchronized void sale(){
  .....
}

如果

同步代码块

在synchronized下包裹的代码称为同步代码块

就是将可能会发生线程安全问题的代码,给包括起来。
synchronized(同一个数据){
  可能会发生线程冲突问题的代码
}

没有锁的线程,即使获取到 CPU的执行权,也无法进行到同步代码块中

4 多线程死锁

同步中嵌套同步,导致锁无法被释放。

上一篇 下一篇

猜你喜欢

热点阅读