59.同步块、并发容器和死锁
1.同步块
同步块(synchronized(obj)){ },obj称之为同步监视器
1.obj可以是任何对象,但是推荐使用共享资源作为同步监视器
2.同步方法中无需指定同步监视器,因为同步方法的同步监视器时this即该对象本身,或class即类的模子
同步监视器执行过程
1.第一个线程访问,锁定同步监视器,执行其中代码
2.第二个线程访问,发现同步监视器被锁定,无法访问
3.第一个线程访问完毕,解锁同步监视器
4.第二个线程访问,发现同步监视器未锁,访问并锁定
注:java中四大块:局部块,构造块,静态块,同步块。
例
例:
2.并发容器
3.死锁
多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能进行,
而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形。某一个同步块同时拥有
“两个以上对象的锁”时,就可能会发生死锁的问题
例: