A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

多线程中同步时,Object obj=new Object(),用synchronized(obj)中obj是什么意思,为什么要创建Object类的对象

4 个回复

倒序浏览
相当于锁的钥匙,任何对象都可以作为钥匙,不仅仅是Object这个对象。
谁拿到了这个钥匙,谁进同步代码块,钥匙就一把,这个线程进去了,其他的就进不来
回复 使用道具 举报
Java中的每一个对象都可以作为锁。
对于同步方法,锁是当前实例对象。
对于静态同步方法,锁是当前对象的Class对象。
对于同步方法块,锁是Synchonized括号里配置的对象。
当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必须释放锁。
具体就设计到JVM虚拟机的问题,我也不是特别了解具体实现,楼主就把它当作一个钥匙就好了
synchronized 方法控制对类成员变量的访问:每个类实例对应一把锁,每个 synchronized 方法都必须获得调用该方法的类实例的锁方能执行,否则所属线程阻塞,方法一旦执行,就独占该锁,直到从该方法返回时才将锁释放,此后被阻塞的线程方能获得该锁,重新进入可执行状态。

评分

参与人数 1技术分 +1 收起 理由
夜默 + 1

查看全部评分

回复 使用道具 举报
对于同步方法,锁是当前实例对象。
对于静态同步方法,锁是当前对象的Class对象。
对于同步方法块,锁是Synchonized括号里配置的对象。
当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必须释放锁。
具体就设计到JVM虚拟机的问题,我也不是特别了解具体实现,楼主就把它当作一个钥匙就好了
回复 使用道具 举报
obj是一个对象,synchronized(obj)的obj可以理解为一个锁,这个锁必须是一个对象,同步函数的锁是this,因为函数都有一个所属对象引用,就是this。this代表这个对象。静态同步函数的锁不是this,是Class对象,就是这个类的字节码对象
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马