作者:杀手也热血_949 | 来源:互联网 | 2023-02-05 12:59
这种情况有什么问题:
private static final Integer LOCK=0;
synchronized(LOCK){
//work
}
建议不要使用推荐的监视器来锁定.
1> Andy Turner..:
建议不要使用推荐的监视器来锁定.
private static final Integer LOCK=0;
是相同的
private static final Integer LOCK=Integer.valueOf(0);
并且Integer.valueOf(0)
是通过规范缓存.
这意味着任何其他人也可以获得Integer.valueOf(0)
并同步它; 所以你可能会得到意外的争用(充其量)或死锁(最坏的情况).
你可以使用new Integer(0)
,这不是一个缓存的实例; 或者只是使用new Object()
,因为Integer
如果它仅用作监视器,则它是无关紧要的.