Ami*_*r.F 3 java multithreading inner-classes
说我有一个名为“示例”的课程
在“示例”中,我有一个可运行的内部类
我在“示例”中执行 runnable
public class Example {
public Example() {
//executing the runnable here
}
private void a() {
}
public void b() {
}
public class RunMe implements Runnable {
public void run() {
a();
b();
}
}
}
Run Code Online (Sandbox Code Playgroud)
假设 Example 在主线程上运行,这里会发生什么?
a 和 b 是从 RunMe 线程还是主线程运行?
a 是私有的,b 是公共的,这有关系吗?
您错过了使我们能够回答您的问题的关键代码段 - 构造函数。
如果您的构造函数如下所示:
public Example() {
(new Thread(new RunMe())).start();
}
Run Code Online (Sandbox Code Playgroud)
然后,a()和b()将刚刚创建(以下简称“邵仁枚”线程,你称呼它)的线程上运行。
但是,如果您的构造函数如下所示:
public Example() {
(new RunMe()).run();
}
Run Code Online (Sandbox Code Playgroud)
然后你不实际运行它在另一个线程(你只是调用另一个类的方法,它只是碰巧被称为“跑”),等等a(),并b()会在“主”线程中运行。
私有/公共事物在这里无关紧要,因为它RunMe是一个内部类,因此甚至可以访问Example.