使用synchronized同步代码块为什么要定义Object对象
问题描述:
同题目,老师在使用synchronized同步代码块时,自定义了一个Object对象作为锁。
Object lock = new Object(); synchronized (lock) { ...... }
但是在讲到同步方法时,老师说this就可以直接作为锁使用,我在同步代码块使用相同的逻辑程序也可以正常运行。
synchronized (this) { ...... }
请问老师如果可以直接使用this当锁,自定义Object对象作为锁有什么优势吗?
9
收起
正在回答
1回答
同学你好,1、synchronized()小括号里是要被锁定的对象,要锁定哪个对象,就将那个对象写在括号中。synchronized(this)是指锁定当前对象,而synchronized (lock)是指lock对象。
2、线程同步我们可以这样理解,我们在超市中存包时,当一个柜子中存入东西时,就会把这儿柜门锁上,给出小纸条作为钥匙,此时其他人去开这个柜门,就不能打开,而当我们买完东西,使用小纸条打开柜门,取出东西后,这个柜子的锁就释放了!那这时别人再来打开这个柜子,就可以打开了!
具体使用this还是其他对象都是可以的,具体是看那个对象是那个小纸条,如果代码中使用的synchronized(this),则当前对象(this)就相当于这个小纸条。只有当前的用户才可以进行操作,从而实现的同步。
祝学习愉快!
Java工程师 2024版
- 参与学习 2020 人
- 提交作业 1249 份
- 解答问题 1202 个
2024重磅革新,超百小时内容豪华升级,加速提升高级技能与高薪就业竞争力 课程紧贴企业最新人才需求,历经7年持续迭代,帮助万名学子入行转行 从零起点到高阶实战,学习路径稳健顺滑,成就从小白到工程师高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星