在方法中枚举静态变量并将其设置为null时会发生什么

和罗兰兹

给定以下类,并假设打印列表需要很长时间才能运行,如果线程1调用PrintList(),然后线程2在运行时调用ClearList,会发生什么?

我们不是在修改集合,而只是更改引用以指向堆中的其他位置。那么枚举继续起作用吗?如果是这样,是因为_someList引用的副本被放到方法的堆栈框架上了吗?

public class foo()
{

    private static List<string> _someList;

    public void ClearList()
    {
        _someList = null;
    }

    public void PrintList()
    {
        foreach(var item in _someList)
        {
            Console.Print(item);
        }
    }

}
务实的

将发生两种非常可预见的事情之一。在某个时间点,第一个线程将评估变量_someList的值,即对列表的引用。如果在第二个线程清除它之前发生这种情况,那么它将遍历该列表并打印结果。如果第二个线程碰巧在进入foreach循环之前清除了列表,那么您将得到一个null引用异常。

注意,对引用类型的变量的读写是原子的,因此我们知道将变量设置为null不会导致无效的引用。第一个线程将遵循原始引用或null,没有“读取垃圾引用”的可能性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在方法中枚举静态变量并将其设置为null时会发生什么

来自分类Dev

将硬盘中的所有位都设置为1时会发生什么?

来自分类Dev

当存储该引用的局部变量设置为null时,为什么静态变量没有设置为null?

来自分类Dev

静态链接库时静态变量会发生什么

来自分类Dev

当您在python中设置字典时会发生什么?

来自分类Dev

在 C++ 中为对象赋值时会发生什么

来自分类Dev

使用Java中的main方法为类创建对象时会发生什么

来自分类Dev

为什么不将静态变量设置为nil会破坏静态变量的目的?

来自分类Dev

@Value 将静态变量设置为 null

来自分类Dev

当我在Amazon S3中将Quiet设置为true以便在deleteObjects()方法中启用安静模式时会发生什么情况?

来自分类Dev

合成子类的变量时会发生什么?

来自分类Dev

当线程尝试同时调用静态和非静态同步方法时会发生什么?

来自分类Dev

如何使用for循环构造静态变量并将其存储在静态数组中?

来自分类Dev

如果我声明并初始化一个静态变量会发生什么?每次调用都会设置它的值吗?

来自分类Dev

如果未设置枚举,会发生什么?

来自分类Dev

静态变量在main方法之外显示为null

来自分类Dev

合并分支并将其重新设置为master,而不会发生冲突

来自分类Dev

当两个线程同时调用相同的静态方法时会发生什么?

来自分类Dev

将标头包含在静态声明中时会发生什么?

来自分类Dev

当JDBC AutoCommit为False并且未设置显式事务边界时会发生什么

来自分类Dev

将新的HDD添加到VirtualBox Linux VM并将其设置为已经采用的挂载点-旧内容会发生什么?

来自分类Dev

用静态变量枚举Swift中的枚举的问题

来自分类Dev

静态方法中的静态变量

来自分类Dev

当我在异步回调中设置对象时会发生什么?

来自分类Dev

在 Swift 中,当两个线程获取并设置非线程安全属性时会发生什么?

来自分类Dev

新手Q-当我在printf中遗漏变量时会发生什么

来自分类Dev

在Java中设置静态变量

来自分类Dev

在C ++中为对象分配引用的值时会发生什么?

来自分类Dev

将变量绑定到某些数据时会发生什么?

Related 相关文章

  1. 1

    在方法中枚举静态变量并将其设置为null时会发生什么

  2. 2

    将硬盘中的所有位都设置为1时会发生什么?

  3. 3

    当存储该引用的局部变量设置为null时,为什么静态变量没有设置为null?

  4. 4

    静态链接库时静态变量会发生什么

  5. 5

    当您在python中设置字典时会发生什么?

  6. 6

    在 C++ 中为对象赋值时会发生什么

  7. 7

    使用Java中的main方法为类创建对象时会发生什么

  8. 8

    为什么不将静态变量设置为nil会破坏静态变量的目的?

  9. 9

    @Value 将静态变量设置为 null

  10. 10

    当我在Amazon S3中将Quiet设置为true以便在deleteObjects()方法中启用安静模式时会发生什么情况?

  11. 11

    合成子类的变量时会发生什么?

  12. 12

    当线程尝试同时调用静态和非静态同步方法时会发生什么?

  13. 13

    如何使用for循环构造静态变量并将其存储在静态数组中?

  14. 14

    如果我声明并初始化一个静态变量会发生什么?每次调用都会设置它的值吗?

  15. 15

    如果未设置枚举,会发生什么?

  16. 16

    静态变量在main方法之外显示为null

  17. 17

    合并分支并将其重新设置为master,而不会发生冲突

  18. 18

    当两个线程同时调用相同的静态方法时会发生什么?

  19. 19

    将标头包含在静态声明中时会发生什么?

  20. 20

    当JDBC AutoCommit为False并且未设置显式事务边界时会发生什么

  21. 21

    将新的HDD添加到VirtualBox Linux VM并将其设置为已经采用的挂载点-旧内容会发生什么?

  22. 22

    用静态变量枚举Swift中的枚举的问题

  23. 23

    静态方法中的静态变量

  24. 24

    当我在异步回调中设置对象时会发生什么?

  25. 25

    在 Swift 中,当两个线程获取并设置非线程安全属性时会发生什么?

  26. 26

    新手Q-当我在printf中遗漏变量时会发生什么

  27. 27

    在Java中设置静态变量

  28. 28

    在C ++中为对象分配引用的值时会发生什么?

  29. 29

    将变量绑定到某些数据时会发生什么?

热门标签

归档