黑马程序员技术交流社区

标题: 关于多线程中创建Object类对象的问题 [打印本页]

作者: 糯米酿酒    时间: 2013-8-3 18:26
标题: 关于多线程中创建Object类对象的问题
多线程中同步时,Object obj=new Object(),用synchronized(obj)中obj是什么意思,为什么要创建Object类的对象
作者: 李政    时间: 2013-8-3 19:52
相当于锁的钥匙,任何对象都可以作为钥匙,不仅仅是Object这个对象。
谁拿到了这个钥匙,谁进同步代码块,钥匙就一把,这个线程进去了,其他的就进不来
作者: 草帽    时间: 2013-8-3 20:14
Java中的每一个对象都可以作为锁。
对于同步方法,锁是当前实例对象。
对于静态同步方法,锁是当前对象的Class对象。
对于同步方法块,锁是Synchonized括号里配置的对象。
当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必须释放锁。
具体就设计到JVM虚拟机的问题,我也不是特别了解具体实现,楼主就把它当作一个钥匙就好了
synchronized 方法控制对类成员变量的访问:每个类实例对应一把锁,每个 synchronized 方法都必须获得调用该方法的类实例的锁方能执行,否则所属线程阻塞,方法一旦执行,就独占该锁,直到从该方法返回时才将锁释放,此后被阻塞的线程方能获得该锁,重新进入可执行状态。
作者: xwf4348    时间: 2013-8-3 21:29
对于同步方法,锁是当前实例对象。
对于静态同步方法,锁是当前对象的Class对象。
对于同步方法块,锁是Synchonized括号里配置的对象。
当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必须释放锁。
具体就设计到JVM虚拟机的问题,我也不是特别了解具体实现,楼主就把它当作一个钥匙就好了

作者: 吴光新    时间: 2013-8-3 23:37
obj是一个对象,synchronized(obj)的obj可以理解为一个锁,这个锁必须是一个对象,同步函数的锁是this,因为函数都有一个所属对象引用,就是this。this代表这个对象。静态同步函数的锁不是this,是Class对象,就是这个类的字节码对象




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2