java - 内部类可在 Java 中运行

标签 java multithreading inner-classes

假设我有一个名为“Example”的类

在“示例”中我有一个可运行的内部类

我在“Example”中执行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();
       }

    }
}

假设 Example 在主线程上运行会发生什么?

a 和 b 是从 RunMe 线程还是主线程运行?

a 是私有(private)的 b 是公共(public)的有关系吗?

最佳答案

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

如果你的构造函数看起来像这样:

public Example() {
    (new Thread(new RunMe())).start();
}

然后 a()b() 将在您刚刚创建的线程(您称之为“RunMe”线程)上运行。

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

public Example() {
    (new RunMe()).run();
}

然后你实际上并没有在另一个线程上运行它(你只是在另一个类中调用一个方法,它恰好被称为“运行”),所以 a()b() 将在“主”线程上运行。

私有(private)/公共(public)的东西在这里是无关紧要的,因为 RunMe 是一个内部类,所以甚至可以访问 Example 的私有(private)方法。

关于java - 内部类可在 Java 中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20370755/

相关文章:

java - 如何在新的更新 Oreo 8.1 中隐藏软键盘

multithreading - 条件变量真的需要另一个变量吗?

c++ - std::atomic 访问是否作为内存屏障?

C++ 将内部结构作为参数传递

java - 在内部类中调用此实例

java - Java中访问静态嵌套类的方法

java - 单击 'create new account' 时应用程序崩溃

java - 读取公钥文件并使用该 key 加密另一个文件时出现问题

java kdb - 将 C 转换为字符串

Swift for iOS - 2 个 for 循环同时运行?