use*_*212 4 java methods synchronization
在线Java文档中,我发现了以下示例:
public void addName(String name) {
synchronized(this) {
lastName = name;
nameCount++;
}
nameList.add(name);
}
Run Code Online (Sandbox Code Playgroud)
他们说:
如果没有synchronized语句,则必须有一个单独的,不同步的方法,仅用于调用
nameList.add.
有人明白他们的意思吗?
来源可以在这里找到.
本文首先介绍了同步方法 - 到目前为止,读者可能认为同步的粒度单位是一种方法.
事实上,如果不存在synchronized块/语句,上面的示例只能实现为:
public void addName(String name) {
doSyncAdd(name);
nameList.add(name);
}
private synchronized void doSyncAdd(String name) {
lastName = name;
nameCount++;
}
Run Code Online (Sandbox Code Playgroud)
因此,synchronized语句意味着您可以保留需要内联同步的相关代码.而不是必须声明一个单独的方法,它既污染命名空间又碎片化代码流.(好吧,分解方法很适合,但选择更好.)
这意味着您的代码片段可以重写为
public void addName(String name) {
setName(name)
nameList.add(name);
}
private synchronized void setName(String name) {
lastName = name;
nameCount++;
}
Run Code Online (Sandbox Code Playgroud)
即与实例(非静态)方法synchronized(this)相同,块中synchronized的代码synchronized可以移动到一个synchronized方法并从非同步方法调用。效果是一样的。