西南IT社区
    • 注册
    • 登录
    • 搜索
    • 主页
    • 问答
    • 话题
    • 热门
    • 圈子
    • 工作机会
    • 活动
    • 项目

    线程安全

    技术答疑
    线程安全
    1
    1
    7
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 破
      破茧边缘 最后由 编辑

        所谓线程安全,就是指当并发情况下,也就是有多个线程操作同一个资源(具体的话,这里同一个资源可以看成上面例子中的 ticketSurplus,当然这个同一资源也不一定只的是一个变量,也可以是某一个方法),能不能保证这个资源的一致性,如果任何时候都能够保证这种正确的操作结果,那么就可以说是线程安全的。

        如何保证线程安全?在学习操作系统的时候,我们学习了进程管理的内容,其中就有个「进程同步」的概念,所谓进程同步,说简单点就是进程之间具有前后的执行关系。在并发的情况下,不同进程有不同制约关系,比如某些情况下我们是需要 A 进程先执行,然后 B 进程再执行的,但是操作系统具有「异步性」,在并发的情况下,可能出现 B 先执行,A 后执行了,这显然不是我们想要的,所以如果不制约,不控制进程的同步,就会出现上面说的情况。
      6a31240f-de01-464c-8070-ca94ca908c1d-image.png
        当然,除了「同步」这个词,还有一个词——「互斥」,互斥也是用于控制进程之间关系的。

      • 同步:完成某种任务,需要进程之间的执行顺序有先后顺序,相互协调工作。

      • 互斥:一个进程进入临界区访问临界资源,那么剩下的进程就需要进行等待,只有当它退出临界区,才允许下一个进程访问。

        在 Java 中,我们可以通过 synchronized 关键字来保证临界区的同步互斥,当然还有其他的锁也可以实现同步互斥,进而保证多线程运行的安全。
      总的来说,在多线程的情况下,通过加锁的方式保证线程安全。
      69b3a6d2-9547-40b1-9102-485127f834c3-image.png

      1 条回复 最后回复 回复 引用 0
      • First post
        Last post
      使用HTML构建办公软件 使用HTML构建办公软件 使用HTML构建办公软件
      破
      F
      漫
      成
      Y
      洋
      书
      Y
      D
      U
      Y
      娇
      玩
      1
      光
      A
      庆
      小
      U
      Y
      L
      I
      Z
      I
      Y

      西南地区IT社群(QQ)
      云南
      【昆明网页设计交流吧】243627302
      【昆明nodejs交流吧】 243626749
      【VUE】838405306
      【云南程序员总群】343606807
      【昆明UI设计】104031254
      【云南软件外包】15547313
      贵州
      【PHP/java源码/站长交流群】55692114
      四川
      【成都Java/JavaWeb交流】86669225
      【vaScript+PHP+MySql】116270060
      【UI设计/设计交流学习群】135794928
      重庆
      【诺基亚 JAVA游戏博物馆】 559479780
      【PHP,Java,Python,C++接单】 442103442
      西藏
      社群
      昆明网页设计交流吧
      友情链接
      • Funtask
      • Funtask 社区
      • SUWIS
      ©2019-2021 滇ICP备20006698号