zoukankan      html  css  js  c++  java
  • 多线程安全

    什么是线程安全问题?

    当多个线程共享一个全局变量或者静态变量,做写的时候,可能会受到其他线程的干扰,导致数据有 问题,这种现象叫做线程干扰问题。

    线程安全的解决办法:

    ① synchronized ——自动锁

    ② lock----jdk1.5并发包——手动锁

    synchronized的用法:

    使用条件:

    ①必须要有两个线程以上,需要发生同步。

    ②多个线程想同步,必须用同一把锁。

    ③保证只有一个线程进行执行。

    工作原理:

    ①有一个线程已经拿到了锁,其他线程已经有CPU执行权,一直排队,等待其他线程释放锁。

    ②锁在代码执行完毕或者程序抛出异常都会被释放掉。

    ③锁一旦被释放掉的话,其他线程就开始获取锁进去同步中去。

    缺点:

    工作效率非常低。

    什么是同步代码块?

    就是将可能会发生线程安全问题的代码,用“synchronized”给包括起来。

        synchronized(同一个数据) {
    
           //可能会发生线程安全问题的代码
        }


    什么是同步函数?

    在方法上用“synchronized”修饰,称之为同步函数。同步函数使用的是“this”锁。

    什么是静态同步函数?

    在同步函数上用静态关键字(static)修饰,称之为静态同步函数。静态同步函数使用当前类的字节码文件作为锁。

    什么是多线程死锁?

    就是同步中嵌套同步,导致锁无法释放的现象产生就是多线程死锁。

    多线程三大特性:

    ①原子性:保证线程的独一无二、一致性,保证线程安全问题。

    ②可见性:当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。

    ③有序性:程序执行的顺序按照代码的先后顺序执行。

    Volatile关键字:

    作用:保证线程之间可见,但是不保证线程的原子性即线程的安全问题。

    使用AtomicInteger原子类:

    AtomicInteger是一个提供原子操作的Integer类,通过线程安全的方式操作加减,使用“AtomicInteger”关键字可以解决“Volatile”关键字造成的线程安全问题。

  • 相关阅读:
    中国跨境电商物流难题的三大解决方案
    美团外卖实时数仓建设实践
    美团商品知识图谱的构建及应用
    c++动态创建二维数组
    小鱼儿fish C#获取数组大小
    C#中定义数组--字符串及数组操作
    warning LNK4070的解决办法
    C++ 中 ZeroMemory、memset 危险需慎用
    C++中new和delete来创建和释放动态数组
    VS调试时查看动态数组的全部元素
  • 原文地址:https://www.cnblogs.com/gujian2/p/12186842.html
Copyright © 2011-2022 走看看