同步锁/互斥锁
互斥锁:是为了避免多个线程抢夺资源造成数据不准确问题而提出的,是为了限制同一时刻多个线程访问同一个数据.
首先需要了解两个概念:
1>多线程并发执行:我们都知道,如果不涉及两个线程之间传值或是共享资源的时候,多个线程之间是没有交集的,你走你的阳关道我走我的独木桥, 井水不犯河水,但是如果需要传值或是共享资源两个线程之间就有了碰头的机会.所以又出了一个线程同步的概念.
2>多线程同步执行:如果单从字面理解很难说清楚有什么区别,都是说多个线程在同一时刻各自做各自的事情,本来不同线程之间就没有什么关系, 这是多线程产生的意义.从多线程产生的意义来说,这个"同步执行"是不正常的!什么意思呢>本来都是独立的线程没有所谓的先后的顺序的,可是这个同步执行,就要求线程之间要有个顺序,所以他是非自然的,是人为扭曲的线程状态.我们通过代码来实现的多线程之间有序的执行的假象
好的我来多个比喻,比如两个中国人一个在南方一个在北方不认识没交集,两个人各自独立的生活,没什么关系,但是他们都要从北京飞到上海,且坐了同一班飞机,假设一次只能有一个人过安检,这个时候就要有个先后顺序,所以安检就是一把锁,这就是同步执行的一个场景,还有其他场景像之前文章写的断点续传,也是多线程碰面的场景,这个比喻与下面说的同步锁的场景有点不贴切,我是着重说了一下多线程碰面的场景,自己体会一下.上代码,程序是模拟多个窗口卖票的过程.
##还有那个锁不能加到循环外面:单说程序也不好说,我还是做个比喻,你家有三个卧室,你的目的是不然人进入你老婆的房间,你只要把你老婆卧室的门锁上就可以了,不是把房门锁上,那样客厅和其他卧室都不能进人了!