一、线程安全
1.1 什么是线程安全?
当多个线程访问一个资源对象时,如果进行了额外的同步控制,或者其他的协调操作,调用这个对象都可以获得正确的结果 (即多个线程去访问同一个对象,和单个线程去执行,其结果是一样的),我们就说这个对象是线程安全的;
1.2 简单案例解释
就拿上面的火车抢票来举例,你可以把火车票看成是一个共享的资源对象,那么多个人去抢同一张票就是多个线程去竞争同一个资源对象,无论是此时只有我一个人在抢票,还是多个人去同时抢票,我们都应该能够买到我们要买的那张票,而不会出现两个人同时抢到一张票的情况
1.3 造成线程/内存不安全的主要原因是什么?
-
目前主流的操作系统都是多任务的,即多个线程同时运行,为了保证线程安全,每个线程只能访问分配给自己的内存空间,而不能访问别的进程的,这是由操作系统所保障的
-
而在每个线程的内存空间中,都会有一块特殊的公共区域,通常称为堆 (也就是内存),进程内的所有线程都可以访问到该区域,这就是造成线程安全问题的潜在因素
通过上面对线程安全的学习,你是否对线程安全有了简单的了解;接下来,就让我们一起用Java代码来实现简单的多线程火车抢票问题吧!
二、多线程抢火车票问题
结果:
参考视频链接:
https://www.bilibili.com/video/BV1V4411p7EF (B站UP主遇见狂神说的多线程详解)
https://www.bilibili.com/video/BV1Eb4y1R7zd (B站UP主图灵学院程序员Mokey)
文章参考