[Java] 实现多线程的两种方法
版權(quán)聲明:請(qǐng)尊重個(gè)人勞動(dòng)成果,轉(zhuǎn)載注明出處,謝謝!
Java提供了兩種創(chuàng)建線程方法:
-
通過實(shí)現(xiàn)Runable接口;
-
通過繼承Thread類本身。
1 .聲明實(shí)現(xiàn) Runnable 接口的類,該類然后實(shí)現(xiàn) run 方法。然后可以分配該類的實(shí)例,在創(chuàng)建 Thread 時(shí)作為一個(gè)參數(shù)來傳遞并啟動(dòng)。例如,計(jì)算大于某一規(guī)定值的質(zhì)數(shù)的線程可以寫成:
class PrimeRun implements Runnable {long minPrime;PrimeRun(long minPrime) {this.minPrime = minPrime;}public void run() {// compute primes larger than minPrime. . .}}然后,下列代碼會(huì)創(chuàng)建并啟動(dòng)一個(gè)線程:
PrimeRun p = new PrimeRun(143);new Thread(p).start();2.將類聲明為 Thread 的子類。該子類應(yīng)重寫 Thread 類的 run 方法。接下來可以分配并啟動(dòng)該子類的實(shí)例。
class PrimeThread extends Thread {long minPrime;PrimeThread(long minPrime) {this.minPrime = minPrime;}public void run() {// compute primes larger than minPrime. . .}}然后,下列代碼會(huì)創(chuàng)建并啟動(dòng)一個(gè)線程:
PrimeThread p = new PrimeThread(143);p.start(); 當(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)行,無論是通過從對(duì) run 方法的調(diào)用中返回,還是通過拋出一個(gè)傳播到 run 方法之外的異常。
3.使用和區(qū)別
Runable源碼:?
Thread 類實(shí)現(xiàn)了 Runnable。激活的意思是說某個(gè)線程已啟動(dòng)并且尚未停止。此外,Runnable 為非 Thread 子類的類提供了一種激活方式。通過實(shí)例化某個(gè) Thread 實(shí)例并將自身作為運(yùn)行目標(biāo),就可以運(yùn)行實(shí)現(xiàn) Runnable 的類而無需創(chuàng)建 Thread 的子類。大多數(shù)情況下,如果只想重寫 run() 方法,而不重寫其他 Thread 方法,那么應(yīng)使用 Runnable 接口。這很重要,因?yàn)?strong>除非程序員打算修改或增強(qiáng)類的基本行為,否則不應(yīng)為該類創(chuàng)建子類。
繼承Thread類實(shí)現(xiàn)多線程,要求放入多線程中的類不能繼承其他類(Java的單繼承特性),如果需要請(qǐng)用 Runnable 實(shí)現(xiàn)(接口可以多實(shí)現(xiàn)并不影響繼承其他類)。?
?
一個(gè)實(shí)現(xiàn)Runnable接口的類可以放在多個(gè)線程中執(zhí)行,多個(gè)線程可以去執(zhí)行同一資源;而繼承Thread只能實(shí)現(xiàn)多個(gè)線程分別去處理自己的資源。(通過Runnable創(chuàng)建的多個(gè)線程可以由編程人員傳入同一個(gè)Runnable對(duì)象,即執(zhí)行同一個(gè)run方法,而通過Thread創(chuàng)建的多線程它們運(yùn)行的都是自己的run方法)。
總結(jié)
以上是生活随笔為你收集整理的[Java] 实现多线程的两种方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows驱动精灵dpInst无法在
- 下一篇: dlv的安装方法