簡體   English   中英

Java的同步塊中“ this”的作用是什么

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM