gpt4 book ai didi

java - 锁定字符串

转载 作者:行者123 更新时间:2023-12-01 06:31:38 25 4
gpt4 key购买 nike

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 block 在一个线程中获取字符串的监视器时,它将阻止另一个线程获取同一监视器。重要的是要理解,synchronized block 正在获取与字段关联的监视器的锁 - 涉及两个单独的字段并不重要。

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

关于java - 锁定字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3984987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com