在多线程App中使用必须"private readonly int"是线程安全的吗?

Must "private readonly int" be thread safe when used in multi-thread App?

在我的多线程应用程序中,我有一个 class 包含一个 private readonly 实例变量,该变量在构造函数中由随机数初始化。

class MyClass
{
  private readonly int randomNumber;


  public MyClass()
  {
    randomNumber = new Random().Next();
  }

  // Is called by different threads
  public int getRandomNumber()
  {
   return randomNumber;
  }
}

在应用程序中 getRandomNumber() 被多个线程调用。我必须采取任何有关线程安全的预防措施吗?

作为后续问题:当我将变量设为静态并在这样的声明中对其进行初始化时,我的威胁安全问题会发生什么变化?

class MyClass
{
  private static readonly int randomNumber = new Random().Next();

  ...
}

只有读和写都需要注意,但是由于你的变量是只读的,我认为无论是多线程还是单线程,都不需要任何预防措施。

是 - 在对象完全构建之前,其他代码无法看到该对象。

注:

  1. 我们需要小心以防执行构造函数链接。
  2. 此外,这取决于类型,例如对于只读的字典,我们可以执行某些键值操作