91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Thread與Runnable在Java中的區別是什么

發布時間:2021-01-21 16:48:33 來源:億速云 閱讀:139 作者:Leah 欄目:編程語言

今天就跟大家聊聊有關Thread與Runnable在Java中的區別是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

Thread 和Runnable 關系

Thread類是接口Runnable的一個實現類。

public class Thread implements Runnable

源碼分析

Thread Threa類運行的時候調用start()方法,源代碼如下:

Thread與Runnable在Java中的區別是什么

調用start()方法,實際運行的是start0方法,方法聲明如下:

private native void start0()

native表明這個方法是個原生函數,即這個函數是用C/C++實現的,被編譯成DLL,由Java調用。

native 方法是在注冊是在Thread對象初始化完成的,如圖,靜態塊static里有個registerNatives方法,該方法會注冊一些本地方法供Thread類使用。

Thread與Runnable在Java中的區別是什么

start0方法會在JVM 新建一個線程

Runnable Runnable 接口只有一個run()方法,完全是線程運行規范。

Thread與Runnable在Java中的區別是什么

代碼實例分析

Thread類定義一個賣票的類

public class TicketThread extends Thread {

  private int ticket = 100000;

  @Override
  public void run() {
    for (int i = 0; i < 100000; i++) {
      if (ticket > 0) {
        System.out.println("ticket=" + ticket-- + "," + Thread.currentThread().getName());
      }
    }
  }
}

啟動三個線程

new TicketThread().start();
new TicketThread().start();
new TicketThread().start();

運行發展每個線程獨立執行了賣票的任務,每個線程中票數依次減1。

Runnable接口實現一個賣票的類

public class TicketRunnableThread implements Runnable {
  private int ticket = 1000;
  public void run() {
    for (int i = 0; i < 1000; i++) {
      if (ticket > 0) {
        System.out.println("ticket=" + ticket-- + "," + Thread.currentThread().getName());
      }
    }
  }
}

啟動三個線程

TicketRunnableThread ticketRunnableThread = new TicketRunnableThread();
new Thread(ticketRunnableThread).start();
new Thread(ticketRunnableThread).start();
new Thread(ticketRunnableThread).start();

三個線程共同完成了賣票任務,然而三個線程共同執行同一段代碼,會造成線程不安全,可以通過加鎖解決。

使用選擇

實現Runnable接口的同時,還可以繼承其他類,避免Java的單繼承性帶來局限性。
Runnable接口可以實現資源共享,Thread無法完成資源共享。

看完上述內容,你們對Thread與Runnable在Java中的區別是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

凤翔县| 峨边| 延庆县| 安西县| 通州区| 临夏市| 溆浦县| 天津市| 沾益县| 澄迈县| 高密市| 平远县| 北宁市| 绵阳市| 西乌| 郑州市| 海兴县| 金华市| 宾阳县| 金昌市| 宁晋县| 阳春市| 厦门市| 永州市| 阳朔县| 上饶县| 双城市| 太原市| 天全县| 栾川县| 芮城县| 海南省| 靖江市| 云南省| 石城县| 迁安市| 海原县| 山阴县| 宁陵县| 新绛县| 尉氏县|