文章详情页
Java 中的synchronized锁代码块的时候需不需要这个类是单例
浏览:83日期:2023-10-25 10:40:31
问题描述
当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。当两个并发线程访问同一个对象object中的这个加锁同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。
那问题来了,如果两个线程访问的是这个对象的不同实例,还会阻塞吗?
问题解答
回答1:synchronized的用法有以下三种
指定对象加锁。类似于synchronized (instance) {}。
直接作用于实例方法。相当于对当前实例加锁,进入同步方法前要获得当前实例的锁。
直接作用于静态方法。相当于对当前类加锁,进入同步方法前获得当前类的锁。
对于上面的1、2.必须是同一对象或者同一实例时才会使线程阻塞。
回答2:锁是加在对象实例上的。加在不同对象上的锁是不会相互影响的。两个线程访问两个不同对象,是不会相互阻塞的。
标签:
java
相关文章:
1. 关docker hub上有些镜像的tag被标记““This image has vulnerabilities””2. dockerfile - [docker build image失败- npm install]3. debian - docker依赖的aufs-tools源码哪里可以找到啊?4. javascript - js机制问题,是否都是等主线程执行完毕再执行异步,如果主线程有好几万行,或者上下文相关呢5. mysql里的大表用mycat做水平拆分,是不是要先手动分好,再配置mycat6. 网页爬虫 - Python小白用Scrapy爬虫返回的是空元素,请问各位大神哪里出了问题?7. Python爬取网页requests乱码8. python3.x - 如何在云服务器上运行python脚本?9. mysql - 如何在数据库里优化 汉明距离 查询?10. javascript - QQ第三方登录的问题
排行榜
