gpt4 book ai didi

java - 如何使方法线程安全

转载 作者:行者123 更新时间:2023-12-02 10:43:18 24 4
gpt4 key购买 nike

假设我有以下方法

public static String addStringItems(String[] items, boolean forceUpperCase) {
StringBuilder builder = new StringBuilder(items.length);
for (String item : items) {
builder.append(item);
}
return forceUpperCase ? builder.toString().toUpperCase() : builder.toString();
}

现在,如何使其线程安全,将其标记为同步是否足够?或者我应该使用StringBuffer而不是StringBuilder?您还有其他建议吗?

最佳答案

您的方法编写得很好并且尽可能线程安全。它不访问共享状态,基本上是一个纯函数。该方法传递一个数组,该数组本身是一个非线程安全对象,但是在评估该方法自身的线程安全性时不应考虑这一问题。

需要注意的关键是,如果调用者没有处理 String[] 的线程安全问题,那么该方法对此无能为力,即使如果它尝试在同步块(synchronized block)内创建防御性副本。无法保证此方法使用的锁将用于在可能修改的所有其他位置保护 String[]。这就是为什么 String[] 参数的并发一致性从根本上来说是调用者的责任。

出于同样的原因,不需要使用StringBuffer,它仅在线程之间共享时才有意义。您的 StringBuilder 永远不会离开该方法,并且该方法会在同一线程上完整执行。

关于java - 如何使方法线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21216336/

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