我有两个方法在一个线程中同时工作,并且我能够从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
对象的access
和counter
字段将始终为零。此外,我不知道这是否是一个错误,但result
和counterB
变量不会存储对字段的引用,而是存储字段值的副本。
此外,为了防止内存一致性错误,您应该使用同步变量或原子变量(在您的情况下是AtomicInteger(。