线程安全
-
所谓线程安全,就是指当并发情况下,也就是有多个线程操作同一个资源(具体的话,这里同一个资源可以看成上面例子中的 ticketSurplus,当然这个同一资源也不一定只的是一个变量,也可以是某一个方法),能不能保证这个资源的一致性,如果任何时候都能够保证这种正确的操作结果,那么就可以说是线程安全的。
如何保证线程安全?在学习操作系统的时候,我们学习了进程管理的内容,其中就有个「进程同步」的概念,所谓进程同步,说简单点就是进程之间具有前后的执行关系。在并发的情况下,不同进程有不同制约关系,比如某些情况下我们是需要 A 进程先执行,然后 B 进程再执行的,但是操作系统具有「异步性」,在并发的情况下,可能出现 B 先执行,A 后执行了,这显然不是我们想要的,所以如果不制约,不控制进程的同步,就会出现上面说的情况。
当然,除了「同步」这个词,还有一个词——「互斥」,互斥也是用于控制进程之间关系的。-
同步:完成某种任务,需要进程之间的执行顺序有先后顺序,相互协调工作。
-
互斥:一个进程进入临界区访问临界资源,那么剩下的进程就需要进行等待,只有当它退出临界区,才允许下一个进程访问。
在 Java 中,我们可以通过 synchronized 关键字来保证临界区的同步互斥,当然还有其他的锁也可以实现同步互斥,进而保证多线程运行的安全。
总的来说,在多线程的情况下,通过加锁的方式保证线程安全。
-
西南地区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
- 西藏