區別
run()
只是一個普通的方法調用,不會開啟新的線程。
start()
會開啟新的線程,分配新的資源。里面的變量互不影響。
實例
package multithreading;public class MyThread extends Thread {String flag;public MyThread(String flag) {this.flag = flag;}@Overridepublic void run() {String tname = Thread.currentThread().getName();System.out.println(tname + "線程的run方法被調用……");for (int i = 0; i < 5; i++) {try {Thread.sleep(200);System.out.println(tname + "...." + flag);} catch (InterruptedException e) {e.printStackTrace();}}}public static void main(String[] args) {MyThread t1 = new MyThread("a");MyThread t2 = new MyThread("b");MyThread t3 = new MyThread("c");t1.run();t2.run();t3.run();System.out.println("-------------分割線-----------");t1.start();t2.start();t3.start();}
}
運行結果
main線程的run方法被調用……
main....a
main....a
main....a
main....a
main....a
main線程的run方法被調用……
main....b
main....b
main....b
main....b
main....b
main線程的run方法被調用……
main....c
main....c
main....c
main....c
main....c
-------------分割線-----------
Thread-0線程的run方法被調用……
Thread-2線程的run方法被調用……
Thread-1線程的run方法被調用……
Thread-0....a
Thread-2....c
Thread-1....b
Thread-2....c
Thread-0....a
Thread-1....b
Thread-0....a
Thread-2....c
Thread-1....b
Thread-2....c
Thread-0....a
Thread-1....b
Thread-2....c
Thread-0....a
Thread-1....b