多線程被認(rèn)為是計(jì)算機(jī)編程中更復(fù)雜的主題之一,特別是在 Java 中。在應(yīng)用程序中正確使用多線程需要高水平的技能、知識(shí)和經(jīng)驗(yàn)。想了解有關(guān)java更多詳細(xì)信息,建議參加Java培訓(xùn),通過(guò)系統(tǒng)全面的學(xué)習(xí),可以快速提升自己。
以下是Java中多線程接口和類(lèi)的一些核心概念和解釋?zhuān)?/span>
線程:在Java中,線程類(lèi)是與多線程相關(guān)的最重要的類(lèi)。線程可以通過(guò)擴(kuò)展這個(gè)類(lèi)來(lái)實(shí)現(xiàn)。本文稍后將演示它的用法。在生產(chǎn)或開(kāi)發(fā)環(huán)境中,開(kāi)發(fā)人員可能會(huì)發(fā)現(xiàn)修復(fù)與多線程相關(guān)的問(wèn)題非常困難。了解鎖可能有助于解決最令人困惑和最常見(jiàn)的錯(cuò)誤,即使是經(jīng)驗(yàn)豐富的 Java 程序員也難以理解。
Runnable:Runnables 是另一種創(chuàng)建線程的方法。你可以通過(guò)實(shí)現(xiàn) Runnable 接口或擴(kuò)展線程類(lèi)在 Java 中創(chuàng)建線程。在這種情況下,開(kāi)發(fā)人員必須從這個(gè)接口重寫(xiě) run() 方法來(lái)實(shí)現(xiàn)邏輯。(注意:Thread 類(lèi)已經(jīng)實(shí)現(xiàn)了 Runnable)。為了更好地理解多線程,請(qǐng)嘗試在下面顯示的每個(gè)方法中記住共享對(duì)象的鎖定狀態(tài)(如果適用)。
start(), Lock Status:可以獲取鎖。調(diào)度線程運(yùn)行時(shí)調(diào)用此方法。線程一旦被調(diào)度并且 CPU 周期可用,就會(huì)運(yùn)行。
run(), Lock Status:可以獲取鎖;它被 Thread 運(yùn)行時(shí)隱式調(diào)用,以開(kāi)始執(zhí)行線程。在java培訓(xùn)中,有系統(tǒng)全面的理論知識(shí)和企業(yè)級(jí)實(shí)戰(zhàn)項(xiàng)目,可以讓你真正掌握java知識(shí)和技能,更好地進(jìn)行項(xiàng)目開(kāi)發(fā)。
yield(), Lock Status:鎖被持有;這種特殊的方法要么產(chǎn)生或?qū)⒖刂茩?quán)轉(zhuǎn)移到具有相同優(yōu)先級(jí)的不同線程。不能保證它將控制權(quán)轉(zhuǎn)移到哪個(gè)線程——或者它是否會(huì)轉(zhuǎn)移控制權(quán)——并不能保證。下面的示例代碼顯示了如何通過(guò)擴(kuò)展線程類(lèi)在 Java 中創(chuàng)建線程。
sleep(), Lock Status:鎖被持有;使用此方法將導(dǎo)致當(dāng)前正在執(zhí)行的線程在給定的時(shí)間內(nèi)暫停其執(zhí)行。可以以毫秒為單位指定執(zhí)行暫停的時(shí)間量。將拋出一個(gè)中斷的異常,程序員需要解決這個(gè)問(wèn)題。
join(), Lock Status:鎖被持有;使用它會(huì)導(dǎo)致執(zhí)行模式,導(dǎo)致所有線程在當(dāng)前線程的末尾加入。在這種情況下,當(dāng)前線程在切換到另一個(gè)線程之前會(huì)繼續(xù)完成。這也會(huì)引發(fā)一個(gè)中斷的異常,開(kāi)發(fā)人員需要解決這個(gè)異常。
suspend(), Lock Status:鎖被持有;這已被棄用。
resume(),鎖狀態(tài):鎖被持有;這已被棄用;這兩個(gè)線程都已被棄用,因?yàn)樗鼈儠?huì)導(dǎo)致死鎖和凍結(jié)進(jìn)程。
stop(), Lock Status:鎖被釋放; 這已被棄用; 這種特殊的線程方法已被棄用,因?yàn)樗捎趽p壞的對(duì)象而創(chuàng)建了不規(guī)則的狀態(tài)。不建議使用。在java培訓(xùn)中,培訓(xùn)課程實(shí)時(shí)更新,緊跟市場(chǎng)和企業(yè)需求,讓你掌握最新技術(shù),走在市場(chǎng)前沿。
Java 對(duì)象類(lèi)和多線程
Java 的 Object 類(lèi)固有地包含用于控制訪問(wèn)該對(duì)象的方法,尤其是在共享或多線程應(yīng)用程序中。
wait(),Lock Status:當(dāng)前對(duì)象鎖釋放,其他鎖被持有; 使用 wait() 方法將導(dǎo)致當(dāng)前線程停止執(zhí)行并進(jìn)入等待狀態(tài)。這也將釋放它放置在當(dāng)前對(duì)象上的鎖,同時(shí)保留其他對(duì)象上的所有其他鎖。
notify(),鎖狀態(tài):鎖被隨機(jī)等待線程獲取; notify() 方法將通知正在等待獲取當(dāng)前共享對(duì)象上的鎖的線程。
notifyAll(),鎖狀態(tài):鎖被任意線程獲取,等待獲取當(dāng)前共享對(duì)象的鎖。將使用此方法通知所有等待獲取線程鎖的線程。
多線程和并發(fā)程序中常遇到的有Memory-interface、競(jìng)爭(zhēng)條件、死鎖、活鎖和饑餓。問(wèn)題是沒(méi)有止境的,如果你弄錯(cuò)了,將很難發(fā)現(xiàn)和調(diào)試。這是大多數(shù)基于面試的,而不是基于實(shí)際應(yīng)用的Java線程問(wèn)題。想學(xué)習(xí)java多線程的同學(xué)建議通過(guò)參加java培訓(xùn)來(lái)提升自己,在專(zhuān)業(yè)老師的指導(dǎo)下,可以獲得很大進(jìn)步。