如何在Java并发中真正访问方法

use*_*882 3 java concurrency

我想了解Java如何深入工作.所有教程都处于过高的水平,所以我有几个问题:

  1. 鉴于此代码:

    class Example {
      public void foo() {
        int number = getRandomNumber();
        System.out.println(number); 
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    假设在上面的示例中,该foo()方法可以由多个线程访问.每个线程是否都有自己的正确的number变量值,或者第二个线程是否可以修改第一个线程的值(因此它们都打印相同的值)?

  2. 如果int number最终会发生什么?

我想知道的主要事情是,当我有一些初始化(连接,...)时,我想确保线程不会相互干扰.

Jon*_*eet 6

每个线程都有自己的正确的数字变量值,或者第二个线程是否可以修改第一个线程的值(因此它们都打印相同的值)?

这将是更清楚认为它是每一个方法调用foo都有自己的number变量-它的方法中的局部变量.因此,如果这是一种递归方法,即使在单个线程中,您最终也可能同时拥有多个number变量,因为它们是方法的不同调用.

没有其他线程可以更改局部变量的值,也不能在任何其他代码中更改一次调用的值.它是该调用状态的一部分.

如果int号是最终的,会发生什么?

这将阻止您在初始化后更改变量的值,基本上.