Thread的start()与run()方法的区别:
调用一个Thread的start方法,可以启动一个新线程,并在新线程中调用该Thread实例的run()方法中的代码。 新线程启动的方法见JDK中Thread类中start()源码如何实现。
调用一个Thread的run方法,不会启动新线程,而是在调用run方法时的当前线程中,直接调用run()中的代码,没有实现多线程的机制。
run运行结果:
main 0
main 1
main 2
main 3
main 4
main 5
main 6
main 7
main 8
main 9
main 0
main 1
main 2
main 3
main 4
main 5
main 6
main 7
main 8
main 9
start运行结果:
线程1 0
线程2 0
线程1 1
线程2 1
线程1 2
线程1 3
线程1 4
线程1 5
线程1 6
线程2 2
线程1 7
线程2 3
线程1 8
线程2 4
线程1 9
线程2 5
线程2 6
线程2 7
线程2 8
线程2 9
调用一个Thread的start方法,可以启动一个新线程,并在新线程中调用该Thread实例的run()方法中的代码。 新线程启动的方法见JDK中Thread类中start()源码如何实现。
调用一个Thread的run方法,不会启动新线程,而是在调用run方法时的当前线程中,直接调用run()中的代码,没有实现多线程的机制。
package base;
/*
* 类名 TestRun.java
* 说明 description of the class
* 创建日期 2011-3-16
* 作者 kobe
* 版权 ***
*/
public class TestRun implements Runnable {
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + " "+i);
}
}
public static void main(String[] args){
TestRun test=new TestRun();
new Thread(test,"线程1").run();
new Thread(test,"线程2").run();
// new Thread(test,"线程1").start();
// new Thread(test,"线程2").start();
}
}
run运行结果:
main 0
main 1
main 2
main 3
main 4
main 5
main 6
main 7
main 8
main 9
main 0
main 1
main 2
main 3
main 4
main 5
main 6
main 7
main 8
main 9
start运行结果:
线程1 0
线程2 0
线程1 1
线程2 1
线程1 2
线程1 3
线程1 4
线程1 5
线程1 6
线程2 2
线程1 7
线程2 3
线程1 8
线程2 4
线程1 9
线程2 5
线程2 6
线程2 7
线程2 8
线程2 9