当前位置: 首页 > 面试题库 >

实例方法和实例变量的线程安全

苍烨然
2023-03-14
问题内容

我想知道一个类的每个实例是否在该类中都有自己的方法副本?

可以说,我有以下课程MyClass

public MyClass {

    private String s1;

    private String s2;

    private String method1(String s1){
    ...
    }

    private String method2(String s2){
    ...
    }
}

因此,如果两个不同的用户创建了MyClasslike这样的实例:

MyClass instanceOfUser1 = new MyClass();
MyClass instanceOfUser2 = new MyClass();

是否知道每个用户在其线程中都有的方法的副本MyClass?如果是,则实例变量是线程安全的,只要只有实例方法对其进行操作,对吗?

我问这个问题是因为我经常读到实例变量不是线程安全的。而且,当每个用户通过调用new运算符获取实例时,我不明白为什么会这样?


问题答案:

每个对象都有自己的类实例变量的副本-
在类的static所有实例之间共享的变量。实例变量不一定是线程安全的,原因是它们可能被调用异步实例方法的多个线程同时修改。

class Example {
    private int instanceVariable = 0;

    public void increment() {
        instanceVariable++;
    }
}

现在,如果两个不同的线程同时调用increment,那么您将发生数据争用-
instanceVariable在返回的两个方法结束时,可能会增加1或2。您可以通过将synchronized关键字添加increment,或使用a
AtomicInteger而不是int等来消除这种数据争用,但要点是,仅仅因为每个对象都获得了自己的类实例变量的副本,并不一定意味着变量可以在线程安全的方式-
这取决于类的方法。(例外是final不可变的变量,它不能以线程不安全的方式进行访问,缺少像序列化黑客这样的愚蠢的东西。)



 类似资料:
  • 问题内容: 通常,同时调用使用局部变量的实例方法是否仅与线程安全有关? 这是一个简短的例子。将调用多个线程;。 问题答案: 调用方法时,局部变量驻留在单个 调用的堆栈中,因此在多 线程的情况下也不必担心局部变量,但是如果File将其作为 参数传递,则可能会产生问题。 创建线程时,它将创建自己的堆栈。两个线程 将具有两个堆栈,并且一个线程永远不会与其他 线程共享其堆栈。 局部变量始终是线程安全的。但

  • 本文向大家介绍Ruby类实例变量、类实例方法和类变量、类方法的区别,包括了Ruby类实例变量、类实例方法和类变量、类方法的区别的使用技巧和注意事项,需要的朋友参考一下 在Ruby中类实例变量、类实例方法和类变量、类方法的区别比较微妙,而且用法也有相当的区别。本文探讨一下他们的定义和基本的使用场景,以抛砖引玉...   一.类实例变量和类变量   类变量大家都很熟悉了,就是在类定义中用@@开头的变量

  • 对象的实例变量及方法 实例变量(Instance Variables)是当你使用它们时,才会被建立的对象。因此,即使是同一个类的实例,也可以有不同的实例变量。 从技术层面上来看,一个对象(实例)只是存储了它的实例变量和其所属类的引用。因此,一个对象的实例变量仅存在于对象中,方法(我们称之为实例方法(Instance Methods))则存在于对象所属的类中。这也就是为什么同一个类的实例都共享类中的

  • 问题 你想创建类变量和实例变量(属性)。 解决方案 类变量 class Zoo @MAX_ANIMALS: 50 MAX_ZOOKEEPERS: 3 helpfulInfo: => "Zoos may contain a maximum of #{@constructor.MAX_ANIMALS} animals and #{@MAX_ZOOKEEPERS} zoo keep

  • 类变量: ​ 是可在类的所有实例之间共享的值(也就是说,它们不是单独分配给每个实例的)。例如下例中,num_of_instance 就是类变量,用于跟踪存在着多少个Test 的实例。 实例变量: 实例化之后,每个实例单独拥有的变量。 class Test(object): num_of_instance = 0 def __init__(self, name): sel

  • 本文向大家介绍python的类变量和成员变量用法实例教程,包括了python的类变量和成员变量用法实例教程的使用技巧和注意事项,需要的朋友参考一下 本文实例形式讲解了python的类变量和成员变量用法,对于Python程序设计有一定的参考价值。分享给大家供大家参考。具体如下: 先看看下面这段代码: 这里,val1是类变量,可以由类名直接调用,也可以有对象来调用; val2是成员变量,可以由类的对象