在Java中,对象本身可以充当锁定以保护自己的状态。此约定用于许多内置类,如Vector和其他同步集合,其中每个方法都是同步的,因此由对象本身的内部锁保护。这是好事还是坏事?请说明原因。
答案 0 :(得分:3)
赞成
缺点
在大多数情况下,除非您正在开发将被广泛使用的API,否则无关紧要。因此,虽然使用synchronised(this)
并不理想,但这很简单。
答案 1 :(得分:1)
好Vector
,Hashtable
等在内部同步,我们都知道发生了什么......
老实说,我找不到像这样做同步的好理由。以下是我看到的缺点:
if(collection.isEmpty()) { collection.add(...); }
假设目标是只添加一个项目,上面的代码不是线程安全的,因为线程可以在if
检查和实际调用add
之间中断,即使两者都是操作是单独同步的,因此可以在集合中实际获得两个项目。