记录一些自己感触!
线程同步的基本概念
synchronized
对于线程而言,加锁是保证线程安全的必要条件。即访问某一段代码或者某临界资源的时候是需要有一把锁的概念在这儿的。
第一个属性:给临界资源加锁。
如图:想要访问如图的资源则使用如下的方式。
1 | /** |
再来看synchronized的另外一个属性:可重入,是synchronized必须了解的一个概念。
如果是一个同步方法调用另外一个同步方法,有一个方法加了锁,另外一个方法也需要加锁,加的是同一把锁也是同一个线程,那这个时候申请仍然会得到该对象的锁。比如说是synchronized可重入的,有一个方法m1 是synchronized有一个方法m2也是synchrionzed,m1里能不能调m2。我们m1开始的时候这个线程得到了这把锁,然后在m1里面调用m2,如果说这个时候不允许任何线程再来拿这把锁的时候就死锁了。这个时候调m2它发现是同一个线程,因为你m2也需要申请这把锁,它发现是同一个线程申请的这把锁,允许,可以没问题,这就叫可重入锁。
即:同一个线程可以获取当前锁(同一个锁)
1 | class T { |