作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
像下面的方法一样,使用 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
和 string.Concat
(在第二段代码中隐式调用)是线程安全的。
即使其中一个参数是可变的,即使方法改变了参数,例如
public static void AddResult(int value, List<string> results)
{
results.Add("Value " + value);
}
...那么方法本身仍然是线程安全的,只要多个线程不引用相同的List<string>
即可。 .如果多个线程确实引用相同的List<string>
那么即使它只是从列表中读取也是不安全的,因为另一个线程可能会改变它。
关于c# - String 类中的线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30120698/
我是一名优秀的程序员,十分优秀!