java 多线程 start,Java 线程的run()和start()
Java 線程的run()和start()
一個常見的問題:為什么啟動線程是調用start()方法,而不是調用run()方法呢?
答案:
每個線程都在單獨的調用堆棧中啟動。
從主線程調用run()方法,run()方法轉到當前調用堆棧,而不是新調用堆棧的開頭。
如下面例子所示:
package com.yiidian;
/**
* 一點教程網: http://www.yiidian.com
*/
/**
* 啟動線程的錯誤示范
*/
class Demo extends Thread{
public void run(){
System.out.println("running...");
}
public static void main(String args[]){
Demo t1=new Demo();
t1.run();//這樣調用不回啟動單獨的調用堆棧
}
}
輸出結果為:
running...
以上程序Demo的run()線程方法和Demo的main()方法都是處于主線程中,換句話說,這里并沒有創建新的線程。
如果直接調用run()方法,則會出現問題。如下所示:
package com.yiidian;
/**
* 一點教程網: http://www.yiidian.com
*/
/**
* 啟動線程的錯誤示范
*/
class Demo extends Thread{
public void run(){
for(int i=1;i<5;i++){
try{
Thread.sleep(500);
}catch(InterruptedException e){
System.out.println(e);
}
System.out.println(i);
}
}
public static void main(String args[]){
Demo t1=new Demo();
Demo t2=new Demo();
t1.run();
t2.run();
}
}
1
2
3
4
1
2
3
4
正如在上面的程序中看到的那樣,程序執行并沒有上下文切換,因為這里t1和t2將被視為普通對象而不是線程對象
總結
以上是生活随笔為你收集整理的java 多线程 start,Java 线程的run()和start()的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: docker php 多端口,docke
- 下一篇: php文本教学,php中文本操作的类