二.线程安全

二.线程安全,第1张

二.线程安全 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()`:释放同步锁。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5660693.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存