我的代码的相关摘要是这样的:
public class A {
String aString;
public static void main(String[] args) {
B b = new B();
new Thread(b).start();
}
public static class B implements Runnable {
public void run() {
aString = "foo";
}
}
}
我已经有几个月的 Java 编码经验,但线程
和动态
与静态
对我来说仍然相当陌生。为了使线程正确执行,类 B 必须是静态的,否则只有线程执行,而不是两者都执行。我的目标显然是让线程在后台执行,以便我在 A 类中可能拥有的其他代码可以同时执行。问题是,如果类 B 是静态的,我无法操作字符串 aString
,因为我收到异常 非静态变量 aString 无法从静态上下文引用
。
我已经查找了有关此问题的信息,但没有找到任何与在线程中解决此问题相关的内容。我的问题是,如何在 B 类中操作 aString
并且仍然使线程正常工作(两个类都在运行,而不仅仅是 B 类)?
最佳答案
为了使您的示例正常工作,您需要如下内容:
public class A {
volatile String aString;
public static void main(String[] args) throws InterruptedException {
A a = new A();
Thread t = new Thread(a.new B());
t.start();
t.join(); // wait for t to finish
System.out.println(a.aString); // prints "foo"
}
class B implements Runnable {
public void run() {
aString = "foo";
}
}
}
解决静态
问题是比较简单的部分 - 请参阅代码了解具体方法。
我希望代码的其余部分有助于说明使用线程时需要解决的一些问题。
关于Java:从线程操作非静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28493053/