欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Java中Thread 和Runnable區(qū)別

 更新時間:2019年03月23日 11:35:22   作者:Sophie May  
這篇文章主要介紹了Java中Thread 和Runnable的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

Thread 和Runnable 關系

Thread類是接口Runnable的一個實現(xiàn)類。

public class Thread implements Runnable 

源碼分析

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

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

private native void start0()

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

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

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

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

代碼實例分析

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();

運行發(fā)展每個線程獨立執(zhí)行了賣票的任務,每個線程中票數(shù)依次減1。

Runnable接口實現(xiàn)一個賣票的類

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();

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

使用選擇

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

以上所述是小編給大家介紹的Java中Thread 和Runnable區(qū)別 詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關文章

  • 基于@MapperScan和@ComponentScan的使用區(qū)別

    基于@MapperScan和@ComponentScan的使用區(qū)別

    這篇文章主要介紹了@MapperScan和@ComponentScan的使用區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 非常實用的java萬年歷制作方法

    非常實用的java萬年歷制作方法

    這篇文章主要為大家詳細介紹了非常實用的java萬年歷制作方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Java 23種設計模型詳解

    Java 23種設計模型詳解

    本文主要介紹Java 23種設計模型,這里整理了詳細的資料,及實現(xiàn)各種設計模型的示例代碼,有需要的小伙伴可以參考下
    2016-09-09
  • Java消息隊列RabbitMQ入門詳解

    Java消息隊列RabbitMQ入門詳解

    這篇文章主要介紹了Java消息隊列RabbitMQ入門詳解,RabbitMQ是使用Erlang語言開發(fā)的開源消息隊列系統(tǒng),基于AMQP協(xié)議 來實現(xiàn),AMQP的主要特征是面向消息、隊列、路由(包括點對點和發(fā)布 /訂閱)、可靠性、安全,需要的朋友可以參考下
    2023-07-07
  • Java并發(fā)實例之CyclicBarrier的使用

    Java并發(fā)實例之CyclicBarrier的使用

    這篇文章主要介紹了Java并發(fā)實例之CyclicBarrier的使用,涉及CyclicBarrier的介紹,以及相關的并發(fā)實例,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Spring注解開發(fā)生命周期原理解析

    Spring注解開發(fā)生命周期原理解析

    這篇文章主要介紹了Spring注解開發(fā)生命周期原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • SpringCloud Nacos集群搭建過程詳解

    SpringCloud Nacos集群搭建過程詳解

    Nacos集群不僅僅是服務注冊中心,還在微服務架構中發(fā)揮著關鍵的角色,支持多種場景下的服務治理和協(xié)調,本文介紹了如何在SpringCloud環(huán)境中搭建Nacos集群,為讀者提供了一份清晰而詳盡的指南,通過逐步演示每個關鍵步驟,讀者能夠輕松理解并操作整個搭建過程
    2024-02-02
  • Java動態(tài)修改配置即時生效的方式WatchService

    Java動態(tài)修改配置即時生效的方式WatchService

    這篇文章給大家分享了Java動態(tài)修改配置即時生效的方式WatchService的相關知識點內(nèi)容,有興趣的朋友可以參考學習下。
    2018-06-06
  • Java List接口與Iterator接口及foreach循環(huán)使用解析

    Java List接口與Iterator接口及foreach循環(huán)使用解析

    這篇文章主要介紹了Java List接口與Iterator接口及foreach循環(huán),主要包括List接口與Iterator接口及foreach循環(huán)具體的使用方法和代碼,需要的朋友可以參考下
    2022-04-04
  • Java多線程實現(xiàn)快速切分文件的程序

    Java多線程實現(xiàn)快速切分文件的程序

    這篇文章主要為大家詳細介紹了Java多線程實現(xiàn)快速切分文件的相關資料,感興趣的小伙伴們可以參考一下
    2016-06-06

最新評論