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

    什么是线程安全问题?

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

    线程安全的解决办法:

    ① synchronized ——自动锁

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

    synchronized的用法:

    使用条件:

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

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

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

    工作原理:

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

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

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

    缺点:

    工作效率非常低。

    什么是同步代码块?

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

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


    什么是同步函数?

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

    什么是静态同步函数?

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

    什么是多线程死锁?

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

    多线程三大特性:

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

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

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

    Volatile关键字:

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

    使用AtomicInteger原子类:

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

  • 相关阅读:
    湖南省第6届程序大赛第6题 Biggest Number
    湖南省第6届程序大赛第5题 内部收益率
    湖南省第6届程序大赛第4题 台球碰撞
    湖南省第6届程序大赛第3题 数字整除
    湖南省第6届程序大赛第二题 弟弟的作业
    湖南省第6届程序设计大赛第一题 汽水瓶
    Nginx 负载均衡配置
    Nginx 反向代理流程
    Nginx 对客户端请求的特殊处理
    Nginx文件操作的优化
  • 原文地址:https://www.cnblogs.com/gujian2/p/12186842.html
Copyright © 2011-2022 走看看