锁定字符串

2个问题:

  1. str字段在两个A类型的实例之间共享[第2行]
  2. 根据以下代码有什么含义?


class A implements Runnable {

String str = "hello"; // line 2.

public void run(){

Synchronized(str){

System.out.println(str+" "+Thread.currentThread().getName());

Thread.sleep(100);

System.out.println(str+" "+Thread.currentThread().getName());

//anything

}

}

public void static main(String[] args){

Thread one = new Thread(new A(),"one").start();

Thread two = new Thread(new A(),"two").start();

}

}

回答:

该字段本身 不在 两个实例之间共享。它们是不同的领域。但是,它们以相同的值开始,因为要插入字符串文字。

这意味着当该synchronized块在一个线程中获取字符串的监视器时,它将阻止另一线程获取同一监视器。重要的是要了解该synchronized块正在获取与该字段的

相关联的监视器的锁-涉及两个独立的字段无关紧要。

道德:不要同步字符串,尤其是文字。文字尤其糟糕,因为在这种情况下,您可能会拥有另一个类,其代码与相同A,并且 还会 尝试使用相同的监视器进行同步。

以上是 锁定字符串 的全部内容, 来源链接: utcz.com/qa/400232.html

回到顶部