日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

浅析Java线程的三种实现

發(fā)布時間:2025/1/21 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅析Java线程的三种实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、前言

java.lang.Thread類是java的線程類。當(dāng)生成一個Thread類的對象后,一個新的線程就產(chǎn)生了。Java中每一個線程都是通過某個特定的Thread對象的方法run()來完成其操作的,方法run()稱為線程體。

下面簡單介紹Thread類的幾種構(gòu)造方法:

public Thread() public Thread(Runnable target) public Thread(Runnable target,String name) public Thread(String name) 參數(shù) target 是一個實現(xiàn)Runnable 接口的實例,它的作用是實現(xiàn)線程體的run()方法。目標(biāo) target 可為null,表示有本身實例來執(zhí)行程序。name參數(shù)指定線程名字,如果沒有指定則由JVM虛擬機自動分配,如thread-1、thread-2等名字。

在Java中有兩種方法實現(xiàn)線程體:一是繼承線程類Thread,二是實現(xiàn)接口Runnable



二、實現(xiàn)方式1

繼承線程類Thread并重寫其中的方法run(),初始化這個類實例的時候,目標(biāo)target為null,表示由本實例來執(zhí)行線程體。缺點:由于Java只支持單重繼承,用這種方法定義的類不能再繼承其他父類。代碼清單如下:

public class Demo1 extends Thread{boolean isRunning = true; //終止標(biāo)記public void run(){ //方法體 while(isRunning){ try{ . . . }catch(InterruptedException e){ e.printStackTrace(); } } } public static void main(String[] args){demo1 =new Demo1(); //實例化對象 demo1.start(); } } 說明:在main主方法中通過 new Demo1()創(chuàng)建子線程,并通過demo1.start()啟動子線程。main主方法所在線程為主線程,主線程負(fù)責(zé)管理其他子線程。為了能夠使線程停止,在主線程中增加一個標(biāo)識,通過改變該標(biāo)識 demo1.isRunning =false,從而結(jié)束這個線程。



二、實現(xiàn)方式2

提供一個實例接口Runnable的類作為一個線程的目標(biāo)對象,在構(gòu)造Thread類時把目標(biāo)對象(實現(xiàn)Runnable的類)傳遞給這個線程實例,有該目標(biāo)對象(實現(xiàn)Runnable的類)提供線程run()的方法。優(yōu)點:這個時候?qū)崿F(xiàn)接口Runnable的類仍然可以繼承其他父類。代碼清單如下:

public class Demo2 implements Runnable{private Thread myThread; boolean isRunning = true; //終止標(biāo)記public void run(){ //方法體 while(isRunning){ try{ . . . }catch(InterruptedException e){ e.printStackTrace(); } } } public Demo2(){ //構(gòu)造函數(shù) myThread =new Thread(this); //實例化對象 myThread.start(); } public static void main(String[] args){Demo2 demo2 =new Demo2();}}

說明:首先創(chuàng)建一個Thread成員變量myThread,然后用構(gòu)造方法new Thread(this)創(chuàng)建一個線程對象,其中創(chuàng)建線程使用的構(gòu)造方法是Thread(Runnable target),其中的this代表本實例,它是一個實現(xiàn)了Runnable接口的實現(xiàn)類。

三、實現(xiàn)方式3

方法3是對方法2的一種改進(jìn),代碼清單如下:

public class Demo3 implements Runnable{private Thread myThread; boolean isRunning = true; //終止標(biāo)記public Demo3(){ //構(gòu)造函數(shù) myThread =new Thread(new Runnable(){ public void run(){ //方法體 while(isRunning){ try{ . . . }catch(InterruptedException e){ e.printStackTrace(); } } }}); myThread.start();}public static void main(String[] args){Demo3 demo3 =new Demo3(); } }



說明:與方式2比較,我們發(fā)現(xiàn)Frame類不再實現(xiàn)Runnable接口了,而是在實例化Thread類的時候, 定義了一個實現(xiàn)Runnable接口的匿名內(nèi)部類。該方法在Android應(yīng)用開發(fā)中經(jīng)常采用。


三、總結(jié)

看完方式2和方式3后,可能會有些糊涂,這里有必要重新闡述一下它們的區(qū)別

方式3采用Thread(Runnable target)構(gòu)造方法創(chuàng)建一個線程,需要提供一個Runnable接口對象,需要提供的參數(shù)是實現(xiàn)了Runnable接口的匿名內(nèi)部類對象。

方式2采用Thread()構(gòu)造方法創(chuàng)建一個線程,新建一個Thread類,同時重新run()方法。




總結(jié)

以上是生活随笔為你收集整理的浅析Java线程的三种实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。