在JAVA和其他編程語(yǔ)言中,線程是CPU利用率的基本單位。線程是進(jìn)程的一部分,查看進(jìn)程的一種簡(jiǎn)單方法是考慮正在執(zhí)行的程序。
然而,這個(gè)定義并不是 100% 準(zhǔn)確的。 一個(gè)程序可能有多個(gè)進(jìn)程。上面提供的定義只是查看流程的一種簡(jiǎn)單而有用的方法。
如前所述,進(jìn)程包含線程。一個(gè)線程與同一進(jìn)程的其他線程共享該進(jìn)程的數(shù)據(jù)、代碼和其他資源。
在Java中,開發(fā)人員可以構(gòu)建多線程應(yīng)用程序。多線程允許程序的各個(gè)部分并發(fā)或并行運(yùn)行,從而顯著提高應(yīng)用程序的性能。
重要的是要區(qū)分并發(fā)和并行。一個(gè)程序可以同時(shí)運(yùn)行,而不是并行運(yùn)行。
并發(fā)指的是同一個(gè)程序的多個(gè)部分被執(zhí)行(不是同時(shí))。這些不同的部分通過(guò)分時(shí)執(zhí)行。另一方面,并行性是指同一程序的多個(gè)部分同時(shí)執(zhí)行。
可以通過(guò)以下方式在單核系統(tǒng)上實(shí)現(xiàn)并發(fā)交叉。然而,并行性只能在多核系統(tǒng)上通過(guò)在不同的核上運(yùn)行多個(gè)線程來(lái)實(shí)現(xiàn)。
線程還可以用來(lái)抵消進(jìn)程創(chuàng)建過(guò)程中產(chǎn)生的性能開銷。當(dāng)執(zhí)行程序必須執(zhí)行的重復(fù)任務(wù)時(shí),這一點(diǎn)尤其重要。
證明這一點(diǎn)的一個(gè)很好的例子是web服務(wù)器。你可以讓你的服務(wù)器在每次用戶發(fā)出請(qǐng)求時(shí)創(chuàng)建一個(gè)新的進(jìn)程。然而,這將要求在處理下一個(gè)用戶的請(qǐng)求之前,首先完成一個(gè)用戶。
如果你使用的是多線程應(yīng)用程序,那么你的服務(wù)器只需要一個(gè)新線程來(lái)處理新請(qǐng)求。由于線程共享同一個(gè)進(jìn)程的資源,這將節(jié)省你的程序分配新資源的需要以及隨之而來(lái)的開銷。
結(jié)語(yǔ)
當(dāng)編寫普通的Java應(yīng)用程序時(shí),你可以讓JVM為你處理線程。JVM通常一次運(yùn)行一個(gè)程序線程,這可能不適合需要速度的系統(tǒng),比如游戲應(yīng)用程序。因此,作為程序員,你有必要了解如何創(chuàng)建多線程應(yīng)用程序。






