美文网首页
线程安全

线程安全

作者: 司鑫 | 来源:发表于2019-04-02 21:57 被阅读0次

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

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

    2. 解决方式

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

    3. 内置锁:synchronized

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

    同步方法

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

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

    如果

    • synchronized 修饰的是普通方法,那么使用的是 this 锁
    • synchronized 修饰的是静态方法,那么使用的是当前类的字节码作为锁
    同步代码块

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

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

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

    4 多线程死锁

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

    相关文章

      网友评论

          本文标题:线程安全

          本文链接:https://www.haomeiwen.com/subject/ojgnbqtx.html