标签:同步 synchronized 对象 访问 监视器 线程
线程的同步使用关键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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。