浅析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线程的三种实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数码管的使用方法
- 下一篇: 嵌入式开发中对(*(volatile u