gpt4 book ai didi

java - Objective C 相当于 java 中的 intern()

转载 作者:行者123 更新时间:2023-12-02 09:21:22 25 4
gpt4 key购买 nike

我必须根据字符串实现一些同步算法。我的意思是两个线程必须同步,并且这对线程都依赖于一个字符串值(一对线程用于字符串 A,一对线程用于字符串 B,依此类推)。

在java中,我可以使用intern方法来实现该算法,以获取由两个线程共享的单个锁对象。 Java 将所有垃圾放入 jvm 内置池中,而 interne 允许将动态创建的任何字符串转换为池中的垃圾。

我明白了there is also a pooling mechanism in Objective C .

但是 Java 中是否有与 intern() 等效的方法,即一种将普通字符串从字符串常量池中转换为垃圾字符串的方法。获取对这个唯一字符串垃圾的引用,以便我的两个线程可以在同一个对象上同步。

我知道有一些解决办法,但它们都意味着我想避免大量的字符串比较。 (虽然我相信实习生会这样做,但以优化的方式......)

用更一般的术语解释我的问题:我想避免使用将字符串映射到锁的字典。 Java 允许我这样做,这要感谢实习生,因为字符串垃圾(池化)将成为锁。有没有等效的或者我必须使用这张 map 。

谢谢大家, 史蒂芬

最佳答案

我经常使用 Java 和 Objective-C 进行编程。

首先,您所描述的似乎是一种不太理想的共享锁方式。它很棘手,很脆弱,并且会让其他不熟悉字符串实习工作原理的编码人员感到困惑。为什么不在一个类中将一个锁对象作为常量暴露给另一个类呢?

public class Foobar {

public static final Object LOCK = new Object();

public void doLockedStuff() {
synchronized (LOCK) {
// code here
}
}

}

public class Barfoo {
public void doLockedStuff() {
synchronized (Foobar.LOCK) {
// code here
}
}
}

然后您可以在 Objective-C 中采用类似的方法 - 公开共享 LOCK 对象的类方法。

关于java - Objective C 相当于 java 中的 intern(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7345010/

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