相关疑难解决方法(0)

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

假设我们有这两个Runnables:

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

class R2 implements Runnable {
    public void run() { … }
    …
}
Run Code Online (Sandbox Code Playgroud)

那么这有什么区别:

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

    r1.run();
    r2.run();
}
Run Code Online (Sandbox Code Playgroud)

还有这个:

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();
}
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading runnable

209
推荐指数
9
解决办法
18万
查看次数

运行和启动线程之间的区别

我不明白启动和运行线程之间的区别,我测试了两种方法并输出了相同的结果,首先我在同一个线程上使用了run()和start的组合,并且它们执行的功能如下:

public class TestRunAndStart implements Runnable {
public void run() {
    System.out.println("running");
}
public static void main(String[] args) {
     Thread t = new Thread(new TestRunAndStart());
     t.run();
     t.run();
     t.start(); 
}
Run Code Online (Sandbox Code Playgroud)

}

输出是:

running
running
running
Run Code Online (Sandbox Code Playgroud)

然后我看到run()方法的javadoc说: If this thread was constructed using a separate Runnable run object, then that Runnable object's run method is called; otherwise, this method does nothing and returns 所以我尝试使用run()方法而没有单独的runnable,如下所示:

public class TestRun extends Thread {
public void run(){
    System.out.println("Running Normal Thread");
}
public static void main(String[]args){
    TestRun …
Run Code Online (Sandbox Code Playgroud)

java multithreading

7
推荐指数
2
解决办法
1万
查看次数

标签 统计

java ×2

multithreading ×2

concurrency ×1

runnable ×1