Thread start() 和 Runnable run() 之间有什么区别

2022-08-31 05:36:50

假设我们有这两个 Runnable:

class R1 implements Runnable {
    public void run() { … }
    …
}

class R2 implements Runnable {
    public void run() { … }
    …
}

那么这有什么区别:

public static void main() {
    R1 r1 = new R1();
    R2 r2 = new R2();

    r1.run();
    r2.run();
}

还有这个:

public static void main() {
    R1 r1 = new R1();
    R2 r2 = new R2();
    Thread t1 = new Thread(r1);
    Thread t2 = new Thread(r2);

    t1.start();
    t2.start();
}

答案 1

第一个示例:没有多个线程。两者都在单个(现有)线程中执行。不创建线程。

R1 r1 = new R1();
R2 r2 = new R2();

r1并且只是实现接口并从而实现方法的两个不同的类对象。调用时,您将在当前线程中执行它。r2Runnablerun()r1.run()

第二个例子:两个独立的线程。

Thread t1 = new Thread(r1);
Thread t2 = new Thread(r2);

t1并且是类 Thread 的对象。当您调用 时,它会启动一个新线程,并在内部调用 方法在该新线程中执行它。t2t1.start()run()r1


答案 2

如果只是直接调用,它将在调用线程上执行,就像任何其他方法调用一样。 是实际创建新线程所必需的,以便并行执行 runnable 的方法。run()Thread.start()run


推荐