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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

浅析Java线程的三种实现

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

一、前言

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

下面簡單介紹Thread類的幾種構造方法:

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

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



二、實現方式1

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

public class Demo1 extends Thread{boolean isRunning = true; //終止標記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()創建子線程,并通過demo1.start()啟動子線程。main主方法所在線程為主線程,主線程負責管理其他子線程。為了能夠使線程停止,在主線程中增加一個標識,通過改變該標識 demo1.isRunning =false,從而結束這個線程。



二、實現方式2

提供一個實例接口Runnable的類作為一個線程的目標對象,在構造Thread類時把目標對象(實現Runnable的類)傳遞給這個線程實例,有該目標對象(實現Runnable的類)提供線程run()的方法。優點:這個時候實現接口Runnable的類仍然可以繼承其他父類。代碼清單如下:

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

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

三、實現方式3

方法3是對方法2的一種改進,代碼清單如下:

public class Demo3 implements Runnable{private Thread myThread; boolean isRunning = true; //終止標記public Demo3(){ //構造函數 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比較,我們發現Frame類不再實現Runnable接口了,而是在實例化Thread類的時候, 定義了一個實現Runnable接口的匿名內部類。該方法在Android應用開發中經常采用。


三、總結

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

方式3采用Thread(Runnable target)構造方法創建一個線程,需要提供一個Runnable接口對象,需要提供的參數是實現了Runnable接口的匿名內部類對象。

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




總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。