真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Thread與Runnable在Java中的區(qū)別是什么

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

在加查等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站建設(shè)、網(wǎng)站設(shè)計 網(wǎng)站設(shè)計制作按需定制網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),營銷型網(wǎng)站建設(shè),外貿(mào)網(wǎng)站制作,加查網(wǎng)站建設(shè)費用合理。

Thread 和Runnable 關(guān)系

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

public class Thread implements Runnable

源碼分析

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

Thread與Runnable在Java中的區(qū)別是什么

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

private native void start0()

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

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

Thread與Runnable在Java中的區(qū)別是什么

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

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

Thread與Runnable在Java中的區(qū)別是什么

代碼實例分析

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í)行了賣票的任務(wù),每個線程中票數(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();

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

使用選擇

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

看完上述內(nèi)容,你們對Thread與Runnable在Java中的區(qū)別是什么有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。


當(dāng)前標(biāo)題:Thread與Runnable在Java中的區(qū)別是什么
文章URL:http://weahome.cn/article/ggeihj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部