国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Java > 正文

java基本教程之常用的實(shí)現(xiàn)多線程的兩種方式 java多線程教程

2019-11-26 15:47:01
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

關(guān)于線程池的內(nèi)容,我們以后會(huì)詳細(xì)介紹;現(xiàn)在,先對(duì)的Thread和Runnable進(jìn)行了解。本章內(nèi)容包括:
Thread和Runnable的簡(jiǎn)介
Thread和Runnable的異同點(diǎn)
Thread和Runnable的多線程的示例

Thread和Runnable簡(jiǎn)介
Runnable 是一個(gè)接口,該接口中只包含了一個(gè)run()方法。它的定義如下:

復(fù)制代碼 代碼如下:

public interface Runnable {
    public abstract void run();
}

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

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

public class Thread implements Runnable {}
Thread的作用,實(shí)現(xiàn)多線程。

Thread和Runnable的異同點(diǎn)
Thread 和 Runnable 的相同點(diǎn):都是“多線程的實(shí)現(xiàn)方式”。
Thread 和 Runnable 的不同點(diǎn):
Thread 是類,而Runnable是接口;Thread本身是實(shí)現(xiàn)了Runnable接口的類。我們知道“一個(gè)類只能有一個(gè)父類,但是卻能實(shí)現(xiàn)多個(gè)接口”,因此Runnable具有更好的擴(kuò)展性。
此外,Runnable還可以用于“資源的共享”。即,多個(gè)線程都是基于某一個(gè)Runnable對(duì)象建立的,它們會(huì)共享Runnable對(duì)象上的資源。
通常,建議通過(guò)“Runnable”實(shí)現(xiàn)多線程!

Thread和Runnable的多線程示例
1. Thread的多線程示例

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

復(fù)制代碼 代碼如下:

 // ThreadTest.java 源碼
class MyThread extends Thread{ 
    private int ticket=10; 
    public void run(){
        for(int i=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) { 
        // 啟動(dòng)3個(gè)線程t1,t2,t3;每個(gè)線程各賣10張票!
        MyThread t1=new MyThread();
        MyThread t2=new MyThread();
        MyThread t3=new MyThread();
        t1.start();
        t2.start();
        t3.start();
    } 
}
 

運(yùn)行結(jié)果:

復(fù)制代碼 代碼如下:

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

結(jié)果說(shuō)明:
(01) MyThread繼承于Thread,它是自定義個(gè)線程。每個(gè)MyThread都會(huì)賣出10張票。
(02) 主線程main創(chuàng)建并啟動(dòng)3個(gè)MyThread子線程。每個(gè)子線程都各自賣出了10張票。

 

2. Runnable的多線程示例

下面,我們對(duì)上面的程序進(jìn)行修改。通過(guò)Runnable實(shí)現(xiàn)一個(gè)接口,從而實(shí)現(xiàn)多線程。

復(fù)制代碼 代碼如下:

// RunnableTest.java 源碼
class MyThread implements Runnable{ 
    private int ticket=10; 
    public void run(){
        for(int i=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=new MyThread();

        // 啟動(dòng)3個(gè)線程t1,t2,t3(它們共用一個(gè)Runnable對(duì)象),這3個(gè)線程一共賣10張票!
        Thread t1=new Thread(mt);
        Thread t2=new Thread(mt);
        Thread t3=new Thread(mt);
        t1.start();
        t2.start();
        t3.start();
    } 
}

運(yùn)行結(jié)果:

復(fù)制代碼 代碼如下:

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é)果說(shuō)明:
(01) 和上面“MyThread繼承于Thread”不同;這里的MyThread實(shí)現(xiàn)了Thread接口。
(02) 主線程main創(chuàng)建并啟動(dòng)3個(gè)子線程,而且這3個(gè)子線程都是基于“mt這個(gè)Runnable對(duì)象”而創(chuàng)建的。運(yùn)行結(jié)果是這3個(gè)子線程一共賣出了10張票。這說(shuō)明它們是共享了MyThread接口的。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 吉首市| 韶关市| 仁布县| 巴林左旗| 通江县| 福鼎市| 远安县| 乐昌市| 临沧市| 利川市| 宜章县| 武城县| 大宁县| 兴宁市| 乌拉特后旗| 双柏县| 邓州市| 卓尼县| 富裕县| 六盘水市| 威宁| 读书| 潜江市| 梁平县| 鹤峰县| 八宿县| 平罗县| 浏阳市| 富裕县| 凤冈县| 重庆市| 古丈县| 桓台县| 兴国县| 威信县| 延川县| 克拉玛依市| 民权县| 玉树县| 扎赉特旗| 时尚|