黑马程序员技术交流社区

标题: 关于synchronized的锁对象的问题 [打印本页]

作者: jing迪    时间: 2013-12-25 06:41
标题: 关于synchronized的锁对象的问题
多线程中synchronized中需要定义一个锁对象,并传入。但是这个锁对象为任意的都行,但保证唯一。

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

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


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

2、关于锁对象的任意性?Object类可以作为对象传入,程序中的其他类型对象也可以传入。有什么区别吗?
     其实你是对对象了解的不够深刻,每一个对象都是不一样的,体现在内存中就是存储地址的不一样,所以只要对象不一样,创建的锁就不一样,也就达到了加锁的目的




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