首先,请注意以下代码段是相同的。
public void foo() { synchronized (this) { // do something thread-safe }}和:
public synchronized void foo() { // do something thread-safe}做 完全一样的事情 。除了代码的可读性和样式之外,它们都不是其中之一。
当您同步方法或代码块时,重要的是要知道 为什么 要这样做,要锁定的 对象 到底是 什么,目的 是 什么 。
还要注意,在某些情况下,您可能需要 客户端同步 代码块,而在这些情况下,您要的监视器(即,同步对象)不一定是必须的
this,例如本例:
Vector v = getSomeGlobalVector();synchronized (v) { // some thread-safe operation on the vector}我建议您了解有关并发编程的更多知识,一旦您确切了解幕后发生的事情,它将为您提供大量帮助。您应该阅读《Java并行编程》,这是一本关于该主题的好书。如果您想快速了解该主题,请查看Java
Concurrency
@Sun。



