Pet*_*sik 2 java multithreading
假设我有以下方法
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();
}
Run Code Online (Sandbox Code Playgroud)
现在,我如何使其线程安全,标记synchronized足够?或者我应该使用StringBuffer而不是StringBuilder?你还有其他建议吗?
您的方法编写得很好,并且尽可能是线程安全的.它不访问共享状态,基本上是一个纯函数.该方法传递给一个数组,该数组本身就是一个非线程安全的对象,但是在评估方法自身的线程安全性时不应该考虑这个问题.
需要注意的关键是,如果调用者没有处理线程安全问题String[],那么这个方法就无法做到这一点,即使它试图在一个synchronized块内制作一个防御性副本.无法保证此方法使用的锁将用于保护String[]可能被修改的所有其他位置.这就是为什么String[]参数的并发一致性基本上是调用者的责任.
出于同样的原因,不需要使用a StringBuffer,只有在线程之间共享时才有意义.您StringBuilder永远不会离开方法,并且该方法在整个相同的线程上执行.
| 归档时间: |
|
| 查看次数: |
1053 次 |
| 最近记录: |