如果 class 有一个内部 class 并且内部 class 运行一个线程,内部 class 线程是否与外部 class 线程共享相同的字段其他?
If a class has an inner class and the inner class runs a thread, do the inner class threads share the same fields of the outer class with one another?
基本上,如果我有代码:
public class Outer {
public int counter = 0;
public void makeNewThread() {
Thread t1 = new Thread(new Inner());
t1.start();
}
private class Inner implements Runnable {
public void run() { //do stuff involving counter... }
}
}
每次调用 makeNewThread() 时,每个线程都有自己的计数器版本,还是它们都共享相同版本的计数器?我假设它们都共享相同的版本,因为它是一个内部 class,但每个线程都有自己的堆栈,所以我不确定。
他们将共享相同的 counter
。
如果您只有一个 Outer 实例,您将只有一个 counter 实例。所有线程将共享它。
重要!验证从不同线程访问计数器的并发性和可见性问题。很可能您需要使用 AtomicInteger 而不是“int”或将所有访问代码(用于写入和读取操作)包装到一个同步块中。
基本上,如果我有代码:
public class Outer {
public int counter = 0;
public void makeNewThread() {
Thread t1 = new Thread(new Inner());
t1.start();
}
private class Inner implements Runnable {
public void run() { //do stuff involving counter... }
}
}
每次调用 makeNewThread() 时,每个线程都有自己的计数器版本,还是它们都共享相同版本的计数器?我假设它们都共享相同的版本,因为它是一个内部 class,但每个线程都有自己的堆栈,所以我不确定。
他们将共享相同的 counter
。
如果您只有一个 Outer 实例,您将只有一个 counter 实例。所有线程将共享它。
重要!验证从不同线程访问计数器的并发性和可见性问题。很可能您需要使用 AtomicInteger 而不是“int”或将所有访问代码(用于写入和读取操作)包装到一个同步块中。