java线程——什么是线程?
生活随笔
收集整理的這篇文章主要介紹了
java线程——什么是线程?
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
【0】README
0.1) 本文描述轉(zhuǎn)自 core java volume 1, 源代碼為原創(chuàng),旨在理解 java線程——什么是線程? 的相關(guān)知識(shí);
0.2)線程定義:一個(gè)程序可以執(zhí)行多個(gè)任務(wù),每一個(gè)任務(wù)成為線程;
0.3)進(jìn)程和線程的區(qū)別: 本質(zhì)的區(qū)別是, 每個(gè)進(jìn)程擁有自己的一整套變量,而線程則共享數(shù)據(jù);
【1】 什么是線程?
1.1)使用線程給其他任務(wù)提供機(jī)會(huì)
- 1.1.1)下面是在一個(gè)單獨(dú)的線程中執(zhí)行一個(gè)任務(wù)的簡(jiǎn)單過(guò)程:
- step1)將任務(wù)代碼移到實(shí)現(xiàn)了 Runnable接口的類的run方法中:
- step2)創(chuàng)建一個(gè)類對(duì)象:
- step3)由 Runnable創(chuàng)建一個(gè) Thread對(duì)象:(創(chuàng)建一個(gè)新線程)
- step4)啟動(dòng)線程:
Warning)
- W1) 不要調(diào)用 Thread類或 Runnable對(duì)象的run方法。 直接調(diào)用run方法, 只會(huì)執(zhí)行同一個(gè)線程的任務(wù), 而不會(huì)啟動(dòng)新線程;
- W2)應(yīng)該調(diào)用 Thread.start 方法, 這個(gè)方法將創(chuàng)建一個(gè)執(zhí)行run方法的 新線程;
- source code: https://github.com/pacosonTang/core-java-volume/blob/master/chapter14/ThreadTest.java)
1.2)看個(gè)荔枝:
1.2.1)多線程共享一個(gè)變量
Conclusion)實(shí)現(xiàn)Runnable接口比繼承Thread類所具有的優(yōu)勢(shì): (干貨)
- C1):適合多個(gè)相同的程序代碼的線程去處理同一個(gè)資源;
- C2):可以避免java中的單繼承的限制;
- C3):增加程序的健壯性,代碼可以被多個(gè)線程共享,代碼和數(shù)據(jù)獨(dú)立;
Warning)
- W1) main方法其實(shí)也是一個(gè)線程。在java中所有的線程都是同時(shí)啟動(dòng)的,至于什么時(shí)候,哪個(gè)先執(zhí)行,完全看誰(shuí)先得到CPU的資源;
- W2)在java中,每次程序運(yùn)行至少啟動(dòng)2個(gè)線程。一個(gè)是main線程,一個(gè)是垃圾收集線程。因?yàn)槊慨?dāng)使用java命令執(zhí)行一個(gè)類的時(shí)候,實(shí)際上都會(huì)啟動(dòng)一個(gè)JVM,每一個(gè)jVM 實(shí)際就是在操作系統(tǒng)中啟動(dòng)了一個(gè)進(jìn)程;
1.3)判斷線程是否啟動(dòng)(主線程也有可能在子線程結(jié)束之前結(jié)束。并且子線程不受影響,不會(huì)因?yàn)橹骶€程的結(jié)束而結(jié)束)
總結(jié)
以上是生活随笔為你收集整理的java线程——什么是线程?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java线程——阻塞队列
- 下一篇: java线程——中断线程+线程状态+线程