区别
- start()方法是令开启一个线程执行该线程。
- run()方法是在主函数中直接调用该线程类的run方法,不是通常意义上的多线程。
run方法相当于调用了该类的普通方法。start会执行完整的线程周期。
示例
继承Thread类实现
run方法代码如下。
public class Test1 {
public static void main(String[] arg0) {
MyThread thread1 = new MyThread();
MyThread2 thread2 = new MyThread2();
thread1.run();
thread2.run();
}
}
class MyThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println("子程序1");
}
}
}
class MyThread2 extends Thread {
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println("子程序2");
}
}
}
执行结果如下。
将线程运行方法改至srart(),代码如下。
public static void main(String[] arg0) {
MyThread thread1 = new MyThread();
MyThread2 thread2 = new MyThread2();
thread1.**start**();
thread2.**start**();
}
执行结果如下。
实现Runnable接口
实现了Runnable的类不能直接调用start()方法,需要使用Thread的构造方法,如下代码5、6行所示。
public class Test1 {
public static void main(String[] arg0) {
MyThread thread1 = new MyThread();
MyThread2 thread2 = new MyThread2();
Thread thread3 = new Thread(thread1);
Thread thread4 = new Thread(thread2);
thread3.start();
thread4.start();
}
}
class MyThread implements Runnable {
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println("子程序1");
}
}
}
class MyThread2 implements Runnable {
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println("子程序2");
}
}
}
执行结果同上面的继承Thread中的start方法。