Ton*_*oni 2 java synchronization synchronized
假设我有一个
private static Object lock = new Object();
Run Code Online (Sandbox Code Playgroud)
在同一个班级的某个地方
public void run() {
synchronized(lock) {
//only 1 thread here, all others wait
}
}
Run Code Online (Sandbox Code Playgroud)
我总是读到锁对象应该是最终的,但不知道为什么。假设我 100% 知道我的代码不会在任何地方触及锁定对象,如果省略了final关键字,这是否意味着同步不是100%防弹的?
在这种情况下使用final只是一个好的做法。
您可以使用任何对象进行同步,final或者非最终对象,static或者非静态对象。
一起使用final将给static您带来安全性,没有人会在不同的锁上同步相同的代码。如果不使用,final您不确定代码中的某个位置是否未重新分配该变量。
一般来说,使用final初始化后不再重新分配的变量是一种很好的编程实践。它提高了可读性,因为阅读代码的人知道,在不阅读完整代码的情况下,该变量永远不会被重新分配。
| 归档时间: |
|
| 查看次数: |
401 次 |
| 最近记录: |