使用局部变量构建字符串是否是线程安全的String
像下面的方法中的类?假设从多个线程调用以下方法。
public static string WriteResult(int value, string name)
{
return string.Format("Result: value={0} name={1}", value, name);
}
public static string WriteResult2(int value, string name)
{
return "Result: value=" + value + " name=" + name;
}
或者我需要使用StringBuilder
确保线程安全?
那绝对没问题。除了字符串文字之外,任何一段代码中都没有共享状态。由于字符串是不可变的,因此可以在线程之间自由共享字符串,并且两者都可以string.Format
and string.Concat
(在第二段代码中隐式调用)是线程安全的。
即使参数之一是可变的,即使方法改变了参数,例如
public static void AddResult(int value, List<string> results)
{
results.Add("Value " + value);
}
...那么方法本身仍然是线程安全的,只要多个线程不引用同一个List<string>
。如果是多线程did参考相同的List<string>
那么即使它只是不安全read从列表中删除,因为另一个线程可能会改变它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)