如何从另一个类访问变量更新



我有两个方法在一个线程中同时工作,并且我能够从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();
}
}

如果要从Load类中访问Loader类的字段,则需要对Load类中的Loader对象进行引用。您可以通过将Loader对象传递到Load对象的构造函数或使用setter等来实现这一点

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

此外,为了防止内存一致性错误,您应该使用同步变量或原子变量(在您的情况下是AtomicInteger(。

最新更新