永发信息网

求高手指教:synchronized(Foo.class)和synchronized(getClass())

答案:3  悬赏:10  手机版
解决时间 2021-01-24 17:19
最近在网上看到一个流行甚广的说法:
“记得在《Effective Java》一书中看到过将 Foo.class和 P1.getClass()用于作同步锁还不相同,不能用P1.getClass()来达到锁这个Class的目的。P1指的是由Foo类产生的对象。 ”
但是我刚刚找到《Effective Java》第二版翻了一下,并没有找到这一说法。
请高手指教这一说法到底是不是子乌虚有?
synchronized(getClass())到底能否使用?
谢谢!
最佳答案
我对此问题也有疑惑,使用JDK1.6发现下述情况:
1. 查看了JDK关于getClass的说明如下:


  Class<?
extends TSABC>
java.lang.Object.getClass()


  Returns the runtime class of this Object. The returned
Class object is the object that is locked by static
synchronized methods of the represented class.
  The actual result type is Class<? extends |X|> where
|X| is the erasure of the static type of the expression on which
getClass is called. For example, no cast is required in this
code fragment:


  Number n = 0;
Class<? extends Number> c =
n.getClass();


  Returns:
  The Class object that represents the runtime class of this
object.
  See Also:
  The Java * Language
Specification, Third Edition (15.8.2 Class * Literals)
  
  从上面的说明来看:这个 getClass()返回的是静态类锁.


    2. 我也自行写了一个程序进行验证。发现对某对象A,使用A.class和a.getClass()(a为A的实例)是互斥的。
全部回答
没有上下文的话,可能不太好理解“记得在《Effective Java》一书中看到过将 Foo.class和 P1.getClass()用于作同步锁还不相同,不能用P1.getClass()来达到锁这个Class的目的。P1指的是由Foo类产生的对象。”这句话。 要想弄明白Foo.class和P1.getClass() 获得的锁是不是同一个,得先弄明白Foo.class和P1.getClass()获得的对象是不是同一个。 若P1是Foo类的引用,且指向的是Foo类的对象。那么Foo.class和P1.getClass() 获得的锁是Foo的Class对象的锁。 若P1是Foo类的引用,但指向的是Foo类的子类对象。那么Foo.class获得的锁是Foo的Class对象的锁,P1.getClass() 获得的锁是子类的Class对象的锁。 类.class返回类的Class的对象。 类.getClass()返回引用运行时真正所指的对象(因为:子对象的引用可能会赋给父对象的引用变量中)所属的类的Class的对象。
搜一下:求高手指教:synchronized(Foo.class)和synchronized(getClass())
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
义海豪情主题曲叫什么名字
【好梦由来最易醒】请问有谁知道多情自古空余
梦见奶奶拿把剪刀✂️把她自己的左手手指剪断
晋江属于泉州还是厦门?
下四村地址在什么地方,我要处理点事
三星smn900t怎么弄可以恢复出厂时候
下列关于公司目标的说法中正确的有( )。
惠阳区惠州市惠阳区淡水镇土湖村白云坑村民小
25吨冲床用多少大的吸铁
远臭街,人屎臭,狗屎臭,猪屎臭,屎臭屎臭屎
【地球为什么是圆的】大家还在问
人工智能将如何改变各行各业的生产和工作方式
眼睛一直跳什么原因
京东小白卡可以用京东白条的分期吗
用价电子对互斥理论CO2的分子结构是直线型,为
推荐资讯
想问一下 91年产的53度500ml飞天茅台现在大概
莫逆交是什么意思
鹿晗喜欢什么颜色衣服
如果你老婆被坏人绑架走了,叫你吃屎才肯放了
华为1000左右的手机那个型号好?
中国邮政储蓄银行ATM(坪上镇驻地)地址好找么
行政立法的性质
顺丰快递嘉兴到广东省惠州市博罗县吗
温州看内分泌失调的中医有哪个最好医生
宏碁e1-471g-32322g50笔记本电脑怎样连接蓝牙
东北大学 辽宁大学 吉林大学 哪个好 那如果单
释永信有老婆孩子吗
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?