黑马程序员技术交流社区

标题: 怎么理解对象的唯一性? [打印本页]

作者: 悟佛修道    时间: 2013-5-19 20:20
标题: 怎么理解对象的唯一性?
本帖最后由 悟佛修道 于 2013-5-27 08:21 编辑

如图,这是毕老师在讲多线程通信的 安全问题时,讲到的同步加锁,然后该往锁里面传入哪些唯一的对象。Class类型的字节码文件对象这个就不说了。关键是在毕老师说传入一个new的对象时,为什么说只有 r  对象是唯一性的。那下面new的input 和output这两个对象为什么又不唯一了?他们不是也只new了一次吗??

24 ??对象唯一.png (155.97 KB, 下载次数: 0)

24 ??对象唯一.png

作者: 刘胜寒    时间: 2013-5-19 21:14
java中只有一维数组指数,对于多维数组,我们那二维数组int[][] 来举例说明。
int[][] ,可以理解成是一个Object[]的一维数组,每个Object[]的元素是一个int[]一维数组。
Object[0] = int[];
Object[1] = int[];
是这么个意思。楼主理解否。


作者: 张旺达    时间: 2013-5-19 21:55
顶版主~ 顶寒哥!{:soso_e113:}
作者: 袁梦希    时间: 2013-5-20 01:30
楼主你好  如果问题已经解决  那么把帖子的类型改为“已解决”
作者: 悟佛修道    时间: 2013-5-20 13:37
刘胜寒 发表于 2013-5-19 21:14
java中只有一维数组指数,对于多维数组,我们那二维数组int[][] 来举例说明。
int[][] ,可以理解成是一个O ...

???刘版主啊,不知道是你看错了问题还是我看不懂你的回答哦,我是问图里面那个问题。你怎么说的是一维数组二维数组的事啊?难道是你看错问题了?
作者: 刘胜寒    时间: 2013-5-20 17:23
答错贴了。。。
作者: 炉海佳    时间: 2013-5-20 17:59
讲到的同步加锁,你的代码没有发全出来 ,我记得这里同步加锁说的对象唯一,好像是说只要加锁的时候加同一个锁就没问题,我记得没错的话 你说的r对象里面加的锁应该是在函数上,而函数用的锁是本类对象的锁,所以就不能用其它的锁了,只能用r这个对象的锁,不知道是不是你想要的答案
作者: 殇_心。    时间: 2013-5-20 18:17
楼主理解错了。
new的input 和output这两个对象也是唯一的。
只是说input类和output类里面通过装饰模式使用同一个r
传入的参数对象是同一个r。所以锁就用的是r  
作者: 悟佛修道    时间: 2013-5-21 08:32
既然input output这两个对象也是唯一的,那可以传入in  或者  out 对象到锁里面吗??不是说只要保证锁里面对象的唯一性就行吗?
作者: Super_Class    时间: 2013-5-21 09:22
只要有new ,就会在堆内存中开辟空间。对象是持有类对象的引用。开辟的空间不同,引用也就不相同
作者: Sword    时间: 2013-5-21 10:00
如果问题未解决,请继续追问,如果问题解决了,请点击你的帖子下面的"编辑"重新编辑帖子,将分类改为“已解决”,谢谢合作!
作者: 悟佛修道    时间: 2013-5-21 11:26
能不能明确的告诉我传入 in  或  out行不行?为什么?
作者: 炉海佳    时间: 2013-5-21 15:07
看看我之前回答的吧!这次我专门看了。毕老师上课代码
作者: 悟佛修道    时间: 2013-5-23 12:14
有没有人能直接了当明确的告诉我传入in  或者  out行不行啊?
谢谢了!!!
作者: First    时间: 2013-5-25 22:05
楼主:
这是行不通的
原因是Output 类,和Input 类 的synchronized 区域要传的对象是在main方法执行之前加载的,而out 对象 和 in 对象是在main方法之后创建的,所以不能用out对象和 in 对象。

至于为什么r 对象 可以是因为 r对象在new out 对象 与 in对象是 传递给了Output 和 Input 构造函数,成了对象的成员, 而Output 和 Input  synchronized 区域 用的是其成员r。 这2个r 所指向的是同一个对象。

楼主,这样的回答是否满意?
作者: HM张博文    时间: 2013-5-25 22:46
这个大家一起学习吧,我也不清楚




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