当run()方法在java线程中执行?

Tha*_*gnv -2 java multithreading

我有一个简单的线程测试:

package Thread;

class Sum extends Thread {
    int low, up, S;

    public Sum(int a, int b) {
        low = a;
        up = b;
        S = 0;
        System.out.println("This is Thread " + this.getId());
    }

    @Override
    public void run() {
        for (int i = low; i < up; i++) {
            S += i;
        }
        System.out.println(this.getId() + ":" + S);
    }
}

public class Tester {
    public static void main(String agrs[]) {
        Sum T1 = new Sum(1, 100);
        T1.start();
        Sum T2 = new Sum(10, 100);
        T2.start();
        System.out.println("Main process terminated");
    }
}
Run Code Online (Sandbox Code Playgroud)

但我不明白什么时候执行run()方法,它返回相同的:

This is Thread 8
This is Thread 9
Main process terminated
9:4905
8:4950
Run Code Online (Sandbox Code Playgroud)

这意味着在T1和T2启动后执行run()方法.我仍然认为当调用start()方法时,run()将被执行.谢谢提前!

NIN*_*OOP 8

当您调用start()线程对象时,它会调用该run()方法.

如有疑问,请阅读文档:Thread #start():

导致该线程开始执行; Java虚拟机调用此线程的run方法.

结果是两个线程并发运行:当前线程(从调用start方法返回)和另一个线程(执行其run方法).

不止一次启动一个线程永远不合法.特别是,一旦完成执行,线程可能无法重新启动.

推荐阅读:

  1. 为什么我们调用Thread.start()方法反过来调用run方法?
  2. Oracle教程
  3. 为什么在java中的线程对象上调用start()时不会立即调用run()

  • 对于这类问题,我用文档+1答案. (2认同)