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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 悟佛修道 高级黑马   /  2013-5-19 20:20  /  4106 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 悟佛修道 于 2013-5-27 08:21 编辑

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

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

24 ??对象唯一.png

评分

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

查看全部评分

15 个回复

倒序浏览
java中只有一维数组指数,对于多维数组,我们那二维数组int[][] 来举例说明。
int[][] ,可以理解成是一个Object[]的一维数组,每个Object[]的元素是一个int[]一维数组。
Object[0] = int[];
Object[1] = int[];
是这么个意思。楼主理解否。

评分

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

查看全部评分

回复 使用道具 举报
顶版主~ 顶寒哥!{:soso_e113:}
回复 使用道具 举报
楼主你好  如果问题已经解决  那么把帖子的类型改为“已解决”
回复 使用道具 举报
刘胜寒 发表于 2013-5-19 21:14
java中只有一维数组指数,对于多维数组,我们那二维数组int[][] 来举例说明。
int[][] ,可以理解成是一个O ...

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

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

楼主,这样的回答是否满意?
回复 使用道具 举报
这个大家一起学习吧,我也不清楚
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马