Java並發編程-建立線程的兩種方式及區別

來源:互聯網
上載者:User

標籤:java並發   並發   並行   

轉載請註明:http://blog.csdn.net/UniKylin/article/details/45016117
1.線程和進程的區別

並行:是多個任務在同一時間同時執行,例如多核電腦同時計算的任務可以理解為並行
並發:從微觀上看是多個任務搶佔一個CPU從而執行自己的任務,輪流執行任務,但是如果遇到資源衝突的時候並沒有從根本提高執行效率。但是提高了CPU的使用效率。

前段時間在GitHub上的一幅圖可以很好的闡述上面的概念非常形象

2.Java中建立線程的兩種方式

1.第一種方式:直接繼承Thread:

public class Dog extends Thread {    // 私人變數    private int number;    // 初始化乘法表上限數字    public Dog(int number) {        this.number = number;    }    //重寫邏輯方法    @Override    public void run() {        // 列印乘法表        for (int i = 1; i <= number; i++) {            for (int j = 1; j <= i; j++) {                System.out.print(j + " * " + i + " = " + i * j + "\t");            }            System.out.println();        }    }    public static void main(String[] args) {        Dog dog = new Dog(9);        dog.start();//啟動線程列印乘法表    }}

2.第二種方式:實現Runnable介面的方式

public class Cat implements Runnable {    private int number;    public Cat(int number) {        this.number = number;    }    //重寫邏輯方法    @Override    public void run() {        System.out.println("Current Thread :" + Thread.currentThread());        for (int i = 0; i <= number; i++) {            for (int j = 0; j <= i; j++) {                System.out.print(i + " * " + j + " = " + i * j + "\t");            }            System.out.println();        }    }    public static void main(String[] args) {        Thread task = new Thread(new Cat(9));        task.start();    }}

對比以上兩種方式可以發現:第一種方式繼承Thread不能再繼承其他父類,所以對於程式的擴充性不是很友好,但是可以通過this訪問當前線程的資訊。第二種方式繼承Runnable介面,從設計角度來看比較靈活,Java是不支援多繼承但是支援實現多個介面,這樣就可以將這個缺點給克服了,如果要訪問線程資訊需要使用Thread.currentThread();方法。

3.源碼分析

public class Thread implements Runnable {    //關聯Runnable介面    private Runnable target;    //線程邏輯方法    public void run() {        if (target != null) {            target.run();        }    }}//線程介面public interface Runnable {    //定義抽象的線程邏輯方法,    public abstract void run();}

上面的Thread類和Runnable介面是Java JDK中兩個最重要的核心部分,繼承Thread屬於對JDK本身的系統類別的擴充,而實現Runnable介面的方式屬於實現一種標準。不管哪種方式JVM啟動線程的過程中都將他們進行裝載,只不過方式不一樣而已。具體哪種方法比較好,當然第二種方式從設計方面比較優雅和靈活。

Java並發編程-建立線程的兩種方式及區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.