并发与同步概念
并发
并发:在同一时刻,有多个线程同时访问 某一个(一些)资源,带来数据的不安全性 、不稳定性、不确定性。
生活中例子
下课时,多个同学同时抢占同一坑位。
同步
同步:用于解决并发问题,给予线程权限,允许具有权限的线程执行。
实现同步方法-锁
锁
性质:唯一(static)
使用原则:锁越少越好 ,避免死锁发生
实现方法:
1.synchronized
2.Lock Condition
3.synchronized 方法名() {} :锁就是当前对象
生活中例子
坑位有锁,需锁开启。下课时,多个同学抢占同一坑位,仅有一位同学—甲有钥匙(锁即权限),在甲开锁(获取锁)占坑后,锁坑门(同步)。在甲完成如厕动作期间,其他同学仅能在厕所外等待。
执行权限
CPU通过时间片给予线程执行权限及时间,具有权限的线程才能执行。
生活中的例子
在甲同步状态下,所有同学想要进行如厕动作,需要蹲下(执行权限:CPU分配)。任何同学都可以进行蹲下动作,完成蹲下动作需要x秒,期间任何同学可获取蹲下权限(CPU分配时间),仅当甲在坑位完成蹲下动作,开门(释放锁),才算一个同步周期完成。其他同学就算获取蹲下权限,但是不在坑位(不执行代码),不算完成一个同步周期。
解决问题
两查一判断