首先用继承Thread重写run方法创建一个线程。
package threading;
class MyThread2 extends Thread {
@Override
public void run() {
while (true){
System.out.println("hello thread");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}
public class Demo9 {
public static void main(String[] args) {
MyThread2 t = new MyThread2();
t.start();
}
}
但是,如果把t.start换成t.run可以发现运行结果是一样的
为了便于区分,我们在main函数中再写一个while
package threading;
class MyThread2 extends Thread {
@Override
public void run() {
while (true){
System.out.println("hello thread");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}
public class Demo9 {
public static void main(String[] args) {
MyThread2 t = new MyThread2();
t.start();
//t.run();
while (true){
System.out.println("hello main");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}
t.start() :
t.run() :
这下就能看出区别了!
直接调用run并没有创建线程,只是在原来的线程(main)中运行代码。
而调用start则是创建线程,在新线程中执行代码,和main线程并发运行。