栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

二.线程安全

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

二.线程安全

1.1:线程安全
如果有多个线程在同时运行,而这些线程可能会同时运行这段代码。程序每次运行结果和单线程运行的结果是一样的,
而且其他的变量的值也和预期的是一样的,就是线程安全的。

通过一个案例,演示线程的安全问题:

电影院要卖票,我们模拟电影院的卖票过程。假设要播放的电影是 “葫芦娃大战奥特曼”,本次电影的座位共100个(本场电影只能卖100张票)。

我们来模拟电影院的售票窗口,实现多个窗口同时卖 “葫芦娃大战奥特曼”这场电影票(多个窗口一起卖这100张票)

发现出现了两个问题:

  1. 相同的票数,比如5这张票被卖了两回。
  2. 不存在的票,比如0票与-1票,是不存在的。

这种问题,几个窗口(线程)票数不同步了,这种问题称为线程不安全。

1.2:线程同步(同步代码块)

1.3:同步方法:
目标:线程同步_同步代码块

线程同步的作用:就是为了解决线程安全问题的方案。

线程同步解决线程安全问题的核心思想:
        让多个线程实现先后依次访问共享资源,这样就解决了安全问题。
线程同步的做法:
        是把共享资源进行上锁,每次只能一个线程进入访问完毕以后,其他线程才能进来。

线程同步的方式有三种:
    (1)同步代码块。
    (2)同步方法。
    (3)lock显示锁。

b.同步方法
    作用:把出现线程安全问题的核心方法给锁起来,
         每次只能一个线程进入访问,其他线程必须在方法外面等待。
    用法:直接给方法加上一个修饰符 synchronized.
    原理:  同步方法的原理和同步代码块的底层原理其实是完全一样的,只是
          同步方法是把整个方法的代码都锁起来的。
          同步方法其实底层也是有锁对象的:
              如果方法是实例方法:同步方法默认用this作为的锁对象。
              如果方法是静态方法:同步方法默认用类名.class作为的锁对象。

1.4:Lock锁
    目标:线程同步_同步代码块

    线程同步的作用:就是为了解决线程安全问题的方案。

    线程同步解决线程安全问题的核心思想:
            让多个线程实现先后依次访问共享资源,这样就解决了安全问题。
    线程同步的做法:
            是把共享资源进行上锁,每次只能一个线程进入访问完毕以后,其他线程才能进来。

    线程同步的方式有三种:
        (1)同步代码块。
        (2)同步方法。
        (3)lock显示锁。

   c.lock显示锁。
        java.util.concurrent.locks.Lock机制提供了比synchronized代码块和synchronized方法更广泛的锁定操作,
        同步代码块/同步方法具有的功能Lock都有,除此之外更强大

        Lock锁也称同步锁,加锁与释放锁方法化了,如下:
             - `public void lock() `:加同步锁。
             - `public void unlock()`:释放同步锁。

   总结:
        线程安全,性能差。
        线程不安全性能好。假如开发中不会存在多线程安全问题,建议使用线程不安全的设计类。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/658617.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号