[Java-多線程]“基礎(chǔ)篇”02之 常用的實現(xiàn)多線程的兩種方式

概要

本章,我們學(xué)習(xí)“常用的實現(xiàn)多線程的2種方式”:ThreadRunnable。

之所以說是常用的,是因為通過還可以通過Java.util.concurrent包中的線程池來實現(xiàn)多線程。關(guān)于線程池的內(nèi)容,我們以后會詳細介紹;現(xiàn)在,先對的Thread和Runnable進行了解。本章內(nèi)容包括:

Thread和Runnable的簡介

Thread和Runnable的異同點

Thread和Runnable的多線程的示例

轉(zhuǎn)載請注明出處:http://www.cnblogs.com/skywang12345/p/3479063.html

Thread和Runnable簡介

Runnable是一個接口,該接口中只包含了一個run()方法。它的定義如下:

public interface Runnable {

???? public abstract void run();

}

Runnable的作用,實現(xiàn)多線程。我們可以定義一個類A實現(xiàn)Runnable接口;然后,通過new Thread(new A())等方式新建線程。

Thread是一個類。Thread本身就實現(xiàn)了Runnable接口。它的聲明如下:

public class Thread implements Runnable {}

Thread的作用,實現(xiàn)多線程。

Thread和Runnable的異同點

Thread 和 Runnable 的相同點:都是“多線程的實現(xiàn)方式”。

Thread 和 Runnable 的不同點

Thread 是類,而Runnable是接口;Thread本身是實現(xiàn)了Runnable接口的類。我們知道“一個類只能有一個父類,但是卻能實現(xiàn)多個接口”,因此Runnable具有更好的擴展性。

此外,Runnable還可以用于“資源的共享”。即,多個線程都是基于某一個Runnable對象建立的,它們會共享Runnable對象上的資源。

通常,建議通過“Runnable”實現(xiàn)多線程!

Thread和Runnable的多線程示例

1. Thread的多線程示例

下面通過示例更好的理解Thread和Runnable,借鑒網(wǎng)上一個例子比較具有說服性的例子。

//ThreadTest.java 源碼

class MyThread extends Thread{

??? private int ticket=10;

??? public void run(){

???????? for(inti=0;i<20;i++){

???????????? if(this.ticket>0){

???????????????? System.out.println(this.getName()+" 賣票:ticket"+this.ticket--);

????????????? }

?????? }

??? }

};

public class ThreadTest {

??? public static void main(String[] args) {

??? //啟動3個線程t1,t2,t3;每個線程各賣10張票!

??? MyThread t1=newMyThread();

??? MyThread t2=newMyThread();

??? MyThread t3=newMyThread();

??? t1.start();20t2.start();21t3.start();

??? }

}

運行結(jié)果

Thread-0賣票:ticket10

Thread-1賣票:ticket10

Thread-2賣票:ticket10

Thread-1賣票:ticket9

Thread-0賣票:ticket9

Thread-1賣票:ticket8

Thread-2賣票:ticket9

Thread-1賣票:ticket7

Thread-0賣票:ticket8

Thread-1賣票:ticket6

Thread-2賣票:ticket8

Thread-1賣票:ticket5

Thread-0賣票:ticket7

Thread-1賣票:ticket4

Thread-2賣票:ticket7

Thread-1賣票:ticket3

Thread-0賣票:ticket6

Thread-1賣票:ticket2

Thread-2賣票:ticket6

Thread-2賣票:ticket5

Thread-2賣票:ticket4

Thread-1賣票:ticket1

Thread-0賣票:ticket5

Thread-2賣票:ticket3

Thread-0賣票:ticket4

Thread-2賣票:ticket2

Thread-0賣票:ticket3

Thread-2賣票:ticket1

Thread-0賣票:ticket2

Thread-0 賣票:ticket1

結(jié)果說明

(01) MyThread繼承于Thread,它是自定義個線程。每個MyThread都會賣出10張票。

(02) 主線程main創(chuàng)建并啟動3個MyThread子線程。每個子線程都各自賣出了10張票。

2. Runnable的多線程示例

下面,我們對上面的程序進行修改。通過Runnable實現(xiàn)一個接口,從而實現(xiàn)多線程。

//RunnableTest.java 源碼

class MyThread implements Runnable{

???? private int ticket=10;

???? public void run(){

???????? for(inti=0;i<20;i++){

????????????? if(this.ticket>0){

????????????????? System.out.println(Thread.currentThread().getName()+" 賣票:ticket"+this.ticket--);

?????????????? }

???????? }

???? }

};

public class RunnableTest {

???? public static void main(String[] args) {

???? MyThread mt=newMyThread();

???? //啟動3個線程t1,t2,t3(它們共用一個Runnable對象),這3個線程一共賣10張票!

???? Thread t1=newThread(mt);

????? Thread t2=newThread(mt);

????? Thread t3=newThread(mt);

?????? t1.start();

?????? t2.start();

?????? t3.start();

?????? }

}

運行結(jié)果

Thread-0賣票:ticket10

Thread-2賣票:ticket8

Thread-1賣票:ticket9

Thread-2賣票:ticket6

Thread-0賣票:ticket7

Thread-2賣票:ticket4

Thread-1賣票:ticket5

Thread-2賣票:ticket2

Thread-0賣票:ticket3

Thread-1 賣票:ticket1

結(jié)果說明

(01) 和上面“MyThread繼承于Thread”不同;這里的MyThread實現(xiàn)了Thread接口。

(02) 主線程main創(chuàng)建并啟動3個子線程,而且這3個子線程都是基于“mt這個Runnable對象”而創(chuàng)建的。運行結(jié)果是這3個子線程一共賣出了10張票。這說明它們是共享了MyThread接口的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本章,我們學(xué)習(xí)“常用的實現(xiàn)多線程的2種方式”:Thread和Runnable。 之所以說是常用的,是因為通過還可以...
    Explorer_Mi閱讀 271評論 0 0
  • 本文主要講了java中多線程的使用方法、線程同步、線程數(shù)據(jù)傳遞、線程狀態(tài)及相應(yīng)的一些線程函數(shù)用法、概述等。 首先講...
    李欣陽閱讀 2,591評論 1 15
  • Java多線程學(xué)習(xí) [-] 一擴展javalangThread類 二實現(xiàn)javalangRunnable接口 三T...
    影馳閱讀 3,105評論 1 18
  • 在java中對于多線程的實現(xiàn)一定要有一個多線程的主類,多線程主類的實現(xiàn)是要有一定要求的 繼承Thread父類 在j...
    漁樵店閱讀 448評論 0 0
  • 我是人體最大的消化腺, 人體能量我來貢獻, 如果人體是架機器, 沒有我機器就停止作戰(zhàn), 我一旦發(fā)生意外, 機器就不...
    旖旎i閱讀 319評論 6 5

友情鏈接更多精彩內(nèi)容