java基础之线程(1)
線程 是程序中的執(zhí)行線程。Java 虛擬機(jī)允許應(yīng)用程序并發(fā)地運(yùn)行多個(gè)執(zhí)行線程。
每個(gè)線程都有一個(gè)優(yōu)先級(jí),高優(yōu)先級(jí)線程的執(zhí)行優(yōu)先于低優(yōu)先級(jí)線程。每個(gè)線程都可以或不可以標(biāo)記為一個(gè)守護(hù)程序。當(dāng)某個(gè)線程中運(yùn)行的代碼創(chuàng)建一個(gè)新 Thread 對(duì)象時(shí),該新線程的初始優(yōu)先級(jí)被設(shè)定為創(chuàng)建線程的優(yōu)先級(jí),并且當(dāng)且僅當(dāng)創(chuàng)建線程是守護(hù)線程時(shí),新線程才是守護(hù)程序。
當(dāng) Java 虛擬機(jī)啟動(dòng)時(shí),通常都會(huì)有單個(gè)非守護(hù)線程(它通常會(huì)調(diào)用某個(gè)指定類的 main 方法)。Java 虛擬機(jī)會(huì)繼續(xù)執(zhí)行線程,直到下列任一情況出現(xiàn)時(shí)為止:
- 調(diào)用了 Runtime 類的 exit 方法,并且安全管理器允許退出操作發(fā)生。
- 非守護(hù)線程的所有線程都已停止運(yùn)行,無(wú)論是通過(guò)從對(duì) run 方法的調(diào)用中返回,還是通過(guò)拋出一個(gè)傳播到 run 方法之外的異常。
創(chuàng)建新執(zhí)行線程有兩種方法。一種方法是將類聲明為 Thread 的子類。該子類應(yīng)重寫 Thread 類的 run 方法。接下來(lái)可以分配并啟動(dòng)該子類的實(shí)例。例如,計(jì)算大于某一規(guī)定值的質(zhì)數(shù)的線程可以寫成:
?
由于Java是純面向?qū)ο笳Z(yǔ)言,因此,Java的線程模型也是面向?qū)ο蟮摹ava通過(guò)Thread類將線程所必須的功能都封裝了起來(lái)。要想建立一個(gè)線程,必須要有一個(gè)線程執(zhí)行函數(shù),這個(gè)線程執(zhí)行函數(shù)對(duì)應(yīng)Thread類的run方法。Thread類還有一個(gè)start方法,這個(gè)方法負(fù)責(zé)建立線程,相當(dāng)于調(diào)用Windows的建立線程函數(shù)CreateThread。當(dāng)調(diào)用start方法后,如果線程建立成功,并自動(dòng)調(diào)用Thread類的run方法。因此,任何繼承Thread的Java類都可以通過(guò)Thread類的start方法來(lái)建立線程。如果想運(yùn)行自己的線程執(zhí)行函數(shù),那就要覆蓋Thread類的run方法。
在Java的線程模型中除了Thread類,還有一個(gè)標(biāo)識(shí)某個(gè)Java類是否可作為線程類的接口Runnable,這個(gè)接口只有一個(gè)抽象方法run,也就是Java線程模型的線程執(zhí)行函數(shù)。因此,一個(gè)線程類的唯一標(biāo)準(zhǔn)就是這個(gè)類是否實(shí)現(xiàn)了Runnable接口的run方法,也就是說(shuō),擁有線程執(zhí)行函數(shù)的類就是線程類。
從上面可以看出,在Java中建立線程有兩種方法,一種是繼承Thread類,另一種是實(shí)現(xiàn)Runnable接口,并通過(guò)Thread和實(shí)現(xiàn)Runnable的類來(lái)建立線程,其實(shí)這兩種方法從本質(zhì)上說(shuō)是一種方法,即都是通過(guò)Thread類來(lái)建立線程,并運(yùn)行run方法的。但它們的大區(qū)別是通過(guò)繼承Thread類來(lái)建立線程,雖然在實(shí)現(xiàn)起來(lái)更容易,但由于Java不支持多繼承,因此,這個(gè)線程類如果繼承了Thread,就不能再繼承其他的類了,因此,Java線程模型提供了通過(guò)實(shí)現(xiàn)Runnable接口的方法來(lái)建立線程,這樣線程類可以在必要的時(shí)候繼承和業(yè)務(wù)有關(guān)的類,而不是Thread類。
轉(zhuǎn)載于:https://www.cnblogs.com/verkey/archive/2012/11/03/thread.html
總結(jié)
以上是生活随笔為你收集整理的java基础之线程(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 缘 一篇文章 里面有很多喜欢的句子,日后
- 下一篇: tuxedo客户端调用java_tuxe