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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jing迪 高级黑马   /  2013-12-25 06:41  /  972 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

多线程中synchronized中需要定义一个锁对象,并传入。但是这个锁对象为任意的都行,但保证唯一。

有点搞不清楚,
1、定义锁对象的原因?只用synchronized关键字就是作为区分不行吗?为什么非得传入一个锁对象?

2、关于锁对象的任意性?Object类可以作为对象传入,程序中的其他类型对象也可以传入。有什么区别吗?
若是没有区别,任意性原则岂不是没有什么用处,怎么能随便用一个对象来用,还不如不用!


嗯。谢过。

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

3 个回复

倒序浏览
使用锁,是为了防止两个或两个以上线程操作共享数据,出现错乱现象!!锁对象是为了,告诉线程对 那个对象进行加锁;2,因为你加锁是为了防止同步数据的错乱,在两个或者以上线程时所以锁最好是同一个对象。
回复 使用道具 举报
L_t 中级黑马 2013-12-25 09:59:45
藤椅
就想回家一样,开门锁,进去,从家出来,给门上锁。保障安全性
回复 使用道具 举报
1、定义锁对象的原因?只用synchronized关键字就是作为区分不行吗?为什么非得传入一个锁对象?
    如果不定义锁,在操作数据的时候,其他线程也可以访问这个数据,很容易造成数据的不安全性,典型的例子就是买票系统,要有好多个窗口再卖票,但是票的数量是一定的,如果不加锁,那么好多个窗口在操作同一张票时应该怎么办呢?
  而传入一个锁对象就是为要对同步的数据加锁,以防止其他线程来访问,一个线程访问完了,才允许另一个线程来访问。

2、关于锁对象的任意性?Object类可以作为对象传入,程序中的其他类型对象也可以传入。有什么区别吗?
     其实你是对对象了解的不够深刻,每一个对象都是不一样的,体现在内存中就是存储地址的不一样,所以只要对象不一样,创建的锁就不一样,也就达到了加锁的目的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马