【问题标题】:How to access variable update from another class如何从另一个类访问变量更新
【发布时间】:2022-01-04 20:35:57
【问题描述】:

我有两个方法在一个线程中同时工作,我能够从 Loader 类访问 访问变量和计数器变量 到 Load 类

我想要的是当 while 循环在 Loader 类 上更新时,能够访问 Load 类 的更新,因为我想使用更新后的变量.

有可能吗?如果可以,我该怎么做?

class Loader extends Thread {

    int access = 0;
    int counter = 0;
    public void run() {

        while (access < 5) {
        // System.out.println("Hello " + access);
        System.out.println("counterA is " + counter);

        access++;
        counter++;
    }
}


class Load extends Thread {
    public void run() {

        int me = 0;
        Loader acc = new Loader();
        Loader cou = new Loader();

        int result = acc.access;
        int counterB = cou.counter;

        //cannot get the result and counterB outside a loop
        if (counterB == 3) {
            System.out.println("Access " + result);
            System.out.println("counterB is " + counterB);
        }

       //cannot get the result and counterB inside a loop 
       while (me < 5) {
           if (counterB == 3) {
              System.out.println("Access " + result);
              System.out.println("counterB is " + counterB);
           }

           me++;
        }
    }
}


class MyClass {
    public static void main(String[ ] args) {
        Loader obj = new Loader();
        Load o = new Load();
        obj.start();
        o.start();
    }
}

【问题讨论】:

  • edit发帖并正确格式化代码。
  • 您需要将要访问的变量作为字段,而不是局部变量。您还需要 Loader 对象引用 Load 对象,以便它可以找到您要更新的字段。
  • 这听起来你需要使用Observer 模式来解决这个问题。此外,如果您需要观察 int 字段的变化,则需要改用 AtomicInteger
  • 谁能给我一个示例代码

标签: java multithreading while-loop


【解决方案1】:

如果您想从Load 类中访问Loader 类的字段,您需要在Load 类中引用Loader 对象。您可以通过将Loader 对象传递给Load 对象的构造函数或使用setter 等方法来实现此目的。

在上面的代码中,您在 Load 类的 run 方法中创建了两个新的 Loader 对象,并且没有启动它们中的任何一个,因此这两个 Loader 对象的 accesscounter 字段将永远为零。此外,我不知道这是否是一个错误,但 resultcounterB 变量不会存储对字段的引用,而是存储字段值的副本。

此外,为了防止memory consistency errors,您应该使用synchronizationatomic variables(在您的情况下为AtomicInteger)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多