在 Java 的 runnable 中调用 Runnable 会发生什么?

What's happen when call a Runnable in a runnable in Java?

我得到了一个 class:

public class RunnableImplA implements Runnable {


    private Runnable runnableB;
    
    public RunnableImplA(Runnable runnableB) {
        super();
        runnableB= runnableB;
    }


    @Override
    public void run() {
        try {
        
            runnableB.run();
        } finally {
            // some code
        }
    }
}

在同一线程上执行 RunnableImplA & runnableB 运行?

Runnable.run() 不创建线程。这只是一个简单的函数调用,没有什么特别的事情发生。所以,是的,同一个线程。

为了创建新线程,您需要调用 Thread class 的 start() 方法,它在内部调用 run() 方法。因为这里我们不使用 start 方法调用它,它就像对象上的任何其他方法调用一样。所以是的,它将在同一个线程中。

如果你想运行它在不同的线程,那么run()方法需要更新如下:

@Override
    public void run() {
        try {
            Thread innerThread = new Thread(runnableB);
            innerThread.start();
        } finally {
            // some code
        }
    }

是的,运行 在同一线程中。

Runnable只是一个接口,没有别的。某些 类 像 Thread 可以接受 Runnable 作为参数。