[英]what is the role of 'this' in a synchronized block in java
在理解“ this”在同步塊中的作用時,我一點都不困惑。 我對同步塊的用途有一些基本的了解。 該文章說-
不要在同步塊上的非最終字段上進行同步,因為對非最終字段的引用可能隨時更改,然后不同的線程可能在不同的對象上進行同步,即完全不同步。
我不清楚它的實際含義。 有人可以指導我了解在這種情況下這實際上是什么以及為什么不應該在同步塊中同步非最終字段。
java中的this表示這樣的當前對象或實例
class TreeNode {
int content;
TreeNode left;
TreeNode right;
public TreeNode(int content, TreeNode left, TreeNode right) {
this.content = content;
this.left = left;
this.right = right;
}
public void setContent(int content) {
synchronized (this) {
this.content = content;
}
}
}
在上面的代碼中, 這始終表示相同的含義:實例本身。
關於這篇文章,我的理解是不要這樣:
Class Test{
Student ken = new Student('ken');
public void LockTest() {
synchronized(ken){
doSomething();
}
}
}
因為obj是非最終字段,所以可以通過ken = new Student('adam');
在某個地方進行更改ken = new Student('adam');
,在這種情況下,同步首先只能鎖定Student('ken')
實例,
然后引用ken已經更改為Student('adam')
實例,其他線程將發現Student('adam')
沒有鎖定,因此進入同步塊。
因此,如果您同步非最終字段,則可能會有許多不同的鎖。
this
表示該類的當前實例
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.