什么是线程安全

多个线程同时操作同一个共享资源的时候出现的业务安全问题,我们称为线程安全问题

线程安全出现的原因

存在多线程并发
同时访问共享资源
存在修改共享资源

线程安全模拟

image.png

解决线程安全问题—线程同步

线程同步概述

让线程实现依照先后次序访问共享资源,将共享资源加锁,每次只能一个线程进入访问完毕后解锁,其他线程才能进来

同步代码块

作用:把出现线程安全问题的核心代码给上锁
原理:每次只能一个线程进入,执行完毕后自动解锁,其他线程才能进来
image.png
锁对象的要求:理论上锁对象只要对当前同时执行的线程来说是同一个对象即可
image.png
这是因为,如果有a、b、c、d四个线程,a、b所需要的共享资源是1,c、d所需要的共享资源是2,如果用一个3作为同步锁对象,abcd都要竞争这个3,但是ab和cd并没有共用资源,他们是可以共同执行的,这样会影响效率,所以对ab以1为同步锁对象,对cd以2为同步锁对象这样更好

同步方法

image.png
image.png

Lock

image.png

线程通信

什么是线程通信

所谓线程通信就是线程之间相互发送数据

线程通信常见形式

通过共享一个数据的方式实现
根据共享数据的情况决定自己该怎么做,以及通知其他线程怎么做

线程通信实际应用模型

image.png
image.png