线程的同步
作者:互联网
线程的同步使用关键synchronized。
synchronized可以修饰方法,也可以修饰块。
1. synchronized方法
synchronized方法控制”对象“的访问。每个对象都对应一把锁。每个synchronized方法,都必须获得调用该方法的对象的锁才能执行,否则线程将会阻塞。
2. synchronized块
synchronized(obj){}
其中,obj称之为同步监视器(即变化的对象)。
- obj可以是任何对象,但是推荐使用共享对象作为同步监视器。
- 同步方法中,无需指定同步监视器。因为同步方法的同步监视器就是this,就是这个对象本身,或者是class。
- 注意:锁的对象是变化的量。
2.1 同步监视器的执行过程:
a、第一个线程访问,锁定同步监视器,执行其中代码。
b、第二个线程访问,发现同步监视器锁定,无法访问。便等待同步监视器解锁。
c、第一个线程访问完毕,解锁同步监视器。
d、第二个线程访问,发现同步监视器没有锁,然后锁定并访问执行代码。
其中在 java.util.concurrent包中已封装好同步方法,可直接使用。例如CopyOnWriteArrayList 就是封装好的线程安全的arrayList
标签:同步,synchronized,对象,访问,监视器,线程 来源: https://blog.csdn.net/GS_40826/article/details/122152270