gpt4 book ai didi

java - 垃圾收集器和 String.intern()

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:45:46 29 4
gpt4 key购买 nike

如果我这样做

StringBuilder b = new StringBuilder();
b.append("foo").append("bar");
String s = b.toString().intern();
s = null;

StringBuilder 创建的 "foobar" 字符串是否可用于垃圾收集器?

我对 intern() 方法存疑,因为我正在将应用程序的一些代码块与基于字符串的 ID 同步。

像这样:

String id = getUserCurrentId() // this method generates IDs with StringBuider...
synchronized(id.intern()){
// .....
}

这是一个桌面应用程序,有一些线程,每个登录用户在每个登录过程中都拥有一个生成的 ID。

最佳答案

我认为它会起作用:

同时 even interned Strings can be garbage collected (这样您可能会在 JVM 的生命周期内获得您的用户 ID 的不同实例),当您在该同步块(synchronized block)内时,它们不会被垃圾收集(因为那时 String 仍在使用中),所以它应该是对您的目的足够稳定。

即使您下次获得另一个实例,那也只能意味着该锁无论如何都没有竞争,所以没关系。

但我还是不会这样做。

如何使用 a ConcurrentHashMap to get named locks

关于java - 垃圾收集器和 String.intern(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26838955/

29 4 0
文章推荐: java - 从应用引擎使用 Parse 发送推送通知
文章推荐: java - (增量时间)在 Java 中每秒获取 60 个更新
文章推荐: java - List 不为空,但不能在没有空指针异常的情况下调用 .isEmpty