java中可运行的内部类

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 是公共的,这有关系吗?

str*_*ger 5

您错过了使我们能够回答您的问题的关键代码段 - 构造函数。

如果您的构造函数如下所示:

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.