1、r.run()根本就没有新启线程,仍然是一个主线程,只有Runnable实现类的run()方法执行完毕之后,才会执行主线程的剩余逻辑。
2、t.start()才是启动了新线程,主线程可以继续执行自己的逻辑,同时子线程也开始执行子线程自己的逻辑。
3、例子:
public class Test {
public static void main(String[] args) {
test1();
try {
Thread.sleep(4000);
System.out.println("============");
} catch (InterruptedException e) {
e.printStackTrace();
}
test2();
}
private static void test1(){
System.out.println("test1()方法执行start-----");
Runnable r = new Runnable() {
@Override
public void run() {
try {
Thread.sleep(3000);
System.out.println("test1 - Runnable.run()方法执行-----");
}catch (InterruptedException e){
e.printStackTrace();
}
}
};
r.run();
System.out.println("test1()方法执行end-----");
}
private static void test2(){
System.out.println("test2()方法执行start-----");
Runnable r = new Runnable() {
@Override
public void run() {
try {
Thread.sleep(3000);
System.out.println("test2 - Runnable.run()方法执行-----");
}catch (InterruptedException e){
e.printStackTrace();
}
}
};
Thread t = new Thread(r);
t.start();
System.out.println("test2()方法执行end-----");
}
}
打印结果:
test1()方法执行start-----
test1 - Runnable.run()方法执行-----
test1()方法执行end-----
============
test2()方法执行start-----
test2()方法执行end-----
test2 - Runnable.run()方法执行-----
网友评论