2021-05-26
程序员文章站
2022-06-21 10:46:05
...
Thread 中run()方法和start()方法的区别
目录
Thread 中run()方法和start()方法的区别以及为啥不能直接调用run()方法
public void run(){
for(int i=0;i<200;i++){
System.out.println("我先学习多线程"+i);
}
}
public static void main(String[] args) {
ThreadDemo1 t1 = new ThreadDemo1();
//t1.run(); 如果直接调用run方法执行,则run方法为一个普通的类方法,做不到多线程的效果
t1.start(); //调用start方法,开启线程,线程就绪,然后执行run中的方法,达到多线程的效果
for(int i=0;i<1000;i++){
System.out.println("晚上没吃饭"+i);
}
}
总结:如果只是调用run方法,则就是调用了一个普通的类方法,调用start方法则是开启了多线程;
为什么调用了start方法就会调用run方法呢,因为调用start方法时会调用一个start0()的本地方法,而start0()
这个本地方法会在jdk中调用run方法。
try {
start0();
started = true;
} finally {
try {
if (!started) {
group.threadStartFailed(this);
}
} catch (Throwable ignore) {
/* do nothing. If start0 threw a Throwable then
it will be passed up the call stack */
}
}
}
private native void start0();
推荐阅读