線程的 run() 和 start() ; 太騷了 ~~
注:本文轉(zhuǎn)載于:CodeCow · 程序牛
的個人博客:http://www.codecow.cn/
《 似水流年薯演,什么都會變,什么又都不會變 ——勿忘初心承二,繼續(xù)前行 》
繼上一篇 "頭發(fā)都白了弟头,才知道如何實現(xiàn)多線程 "性宏,有小伙伴私聊小編,線程的 run()
和 start()
有什么 區(qū)別
玛痊,空閑之余汰瘫,寫下此文
前言
上篇文章《頭發(fā)都白了,才知道如何實現(xiàn)多線程》小編用多線程方式實現(xiàn)了 邊擼代碼
邊 看島國大片
擂煞,但卻遺留了一個問題混弥,run() 和 start()到底有什么區(qū)別?
回顧Thread
回顧Thread的API
public void start() :導(dǎo)致此線程開始執(zhí)行; Java虛擬機調(diào)用此線程的run方法对省。
public void run() :此線程要執(zhí)行的任務(wù)在此處定義代碼蝗拿。
run() 和 start() 區(qū)別
區(qū)別:
1、調(diào)用 start() 方法是用來啟動線程的蒿涎,輪到該線程執(zhí)行時哀托,會自動調(diào)用 run()
2、直接調(diào)用 run() 方法劳秋,無法達(dá)到啟動多線程的目的仓手,相當(dāng)于主線程線性執(zhí)行 Thread 對象的 run() 方法
3、一個線程對應(yīng)的 start() 方法只能調(diào)用一次玻淑,多次調(diào)用會拋出 java.lang.IllegalThreadStateException 異常嗽冒;run() 方法沒有限制
看不懂沒事,小編給你整個小總結(jié)
1补履、run()相當(dāng)于線程的任務(wù)處理邏輯的入口方法
2添坊、而start()的作用是啟動相應(yīng)的線程
測試start() 方法 上代碼
public class TestThreadByStart {
public static void main(String[] args) {
Thread thread = new Thread() {
@Override
public void run() {
try {
Thread.sleep(3000); //休眠3秒
System.out.println("休眠3秒");
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread running:我還是從前那個少年 ");
}
};
testStart(thread);
}
private static void testStart(Thread thread) {
thread.start(); //調(diào)用 start()方法來啟動線程,輪到該線程執(zhí)行時箫锤,會自動調(diào)用 run()
try {
Thread.sleep(1000); //休眠1秒
System.out.println("休眠1秒");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
start() 方法 測試結(jié)果
在這里插入圖片描述
測試run() 方法 上代碼
public class TestThreadByRun {
public static void main(String[] args) {
Thread thread = new Thread() {
@Override
public void run() {
try {
Thread.sleep(3000); //休眠3秒
System.out.println("休眠3秒");
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread running:我還是從前那個少年 ");
}
};
testRun(thread);
}
private static void testRun(Thread thread) {
thread.run(); //直接調(diào)用 run() 方法贬蛙,相當(dāng)于主線程線性執(zhí)行 Thread 對象的 run() 方法
//休眠1秒
try {
Thread.sleep(1000);
System.out.println("休眠1秒");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
run() 方法 測試結(jié)果
在這里插入圖片描述
最后:
不足之處,還望小伙伴多多諒解麻汰;
有錯之處速客,還望小伙伴指出,小編會盡快改正