亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JAVA面試題 start()和run()詳解

 更新時間:2019年07月16日 09:00:19   作者:Java螞蟻  
這篇文章主要介紹了JAVA面試題 啟動線程是start()還是run()?為什么?,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

問題

面試官:請問啟動線程是start()還是run()方法,能談?wù)剢幔?/p>

應(yīng)聘者:start()方法

當用start()開始一個線程后,線程就進入就緒狀態(tài),使線程所代表的虛擬處理機處于可運行狀態(tài),這意味著它可以由JVM調(diào)度并執(zhí)行。但是這并不意味著線程就會立即運行。只有當cpu分配時間片時,這個線程獲得時間片時,才開始執(zhí)行run()方法。start()是方法,它調(diào)用run()方法.而run()方法是你必須重寫的. run()方法中包含的是線程的主體(真正的邏輯)。

繼承Thread類的啟動方式

public class ThreadTest {
  public static void main(String[] args) {
    MyThread t =new MyThread();
    t.start();
  }
}
 
class MyThread extends Thread{
  @Override
  public void run() {
    System.out.println("Hello World!");
  }
}

實現(xiàn)Runnable接口的啟動方式

public class ThreadTest {
   public static void main(String[] args) {
    Thread t =new Thread(new MyRunnable());
    t.start();
  }
}
 
class MyRunnable implements Runnable{
  @Override
  public void run() {
    System.out.println("Hello World!");
  }
}

實際上這兩種啟動線程的方式原理是一樣的。首先都是調(diào)用本地方法啟動一個線程,其次是在這個線程里執(zhí)行目標對象的run()方法。那么這個目標對象是什么呢?為了弄明白這個問題,我們來看看Thread類的run()方法的實現(xiàn):

public void run() {
  if (target != null) {
    target.run();
  }
}

當我們采用實現(xiàn)Runnable接口的方式來實現(xiàn)線程的情況下,在調(diào)用new Thread(Runnable target)構(gòu)造器時,將實現(xiàn)Runnable接口的類的實例設(shè)置成了線程要執(zhí)行的主體所屬的目標對象target,當線程啟動時,這個實例的 run()方法就被執(zhí)行了。

當我們采用繼承Thread的方式實現(xiàn)線程時,線程的這個run()方法被重寫了,所以當線程啟動時,執(zhí)行的是這個對象自身的 run()方法。

總結(jié)起來:如果我們采用的是繼承Thread類的方式,那么這個target就是線程對象自身,如果我們采用的是實現(xiàn)Runnable接口的方式,那么這個target就是實現(xiàn)了Runnable接口的類的實例。

我們再來看一道混跡于各大面試公司筆試的題目:

public class EqualsTest {
   public static void main(String args[]) {
     Thread t = new Thread() {
       public void run() {
         pong();
       }
     };
     t.run();
     System.out.print("ping");
 
  }
 
  static void pong() {
    System.out.print("pong");
  }
}

這里的標準答案是:pongping

這里直接調(diào)用線程的run方法,就相當于調(diào)用普通方法一樣,由上往下執(zhí)行,所以最后的結(jié)果是pongping。但是如果上面改成t.start()之后,這個結(jié)果就不固定了,因為這里有兩個線程(其實還有一個守護線程,這里就先忽略),main線程和 t 線程,這兩個線程獲得cpu的時間就會不固定了,誰先獲得CPU執(zhí)行權(quán),誰就先打印結(jié)果,所以最后的結(jié)果可能pongping也可能是pingpong。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java判斷一個時間是否在當前時間區(qū)間代碼示例

    Java判斷一個時間是否在當前時間區(qū)間代碼示例

    這篇文章主要給大家介紹了關(guān)于使用Java判斷一個時間是否在當前時間區(qū)間的相關(guān)資料,在日常開發(fā)中我們經(jīng)常會涉及到時間的大小比較或者是判斷某個時間是否在某個時間段內(nèi),需要的朋友可以參考下
    2023-07-07
  • 詳解在springmvc中解決FastJson循環(huán)引用的問題

    詳解在springmvc中解決FastJson循環(huán)引用的問題

    本篇文章主要介紹了在springmvc中解決FastJson循環(huán)引用的問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • Java中數(shù)組的定義與使用詳解

    Java中數(shù)組的定義與使用詳解

    這篇文章主要給大家介紹了關(guān)于Java中數(shù)組的定義與使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-11-11
  • Java圖論進階之最小生成樹算法詳解

    Java圖論進階之最小生成樹算法詳解

    最小生成樹(Minimum Spanning Tree)就是給定無向圖中,邊權(quán)重最小的生成樹,下面這篇文章主要給大家介紹了關(guān)于Java圖論進階之最小生成樹算法的相關(guān)資料,文中通過圖文以及實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • spring Boot與Mybatis整合優(yōu)化詳解

    spring Boot與Mybatis整合優(yōu)化詳解

    關(guān)于spring-boot與mybatis整合優(yōu)化方面的介紹,就是Mybatis-Spring-boot-starter的介紹,具體內(nèi)容詳情大家參考下本文
    2017-07-07
  • Mybatis控制臺打印Sql語句的實現(xiàn)代碼

    Mybatis控制臺打印Sql語句的實現(xiàn)代碼

    MyBatis是一個支持普通SQL查詢,存儲過程和高級映射的優(yōu)秀持久層框架,下面給大家介紹Mybatis控制臺打印Sql語句的實現(xiàn)代碼,非常不錯,感興趣的朋友一起看下吧
    2016-07-07
  • Java中出現(xiàn)java.lang.IllegalStateException異常錯誤的解決

    Java中出現(xiàn)java.lang.IllegalStateException異常錯誤的解決

    這篇文章主要介紹了Java中出現(xiàn)java.lang.IllegalStateException異常錯誤的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • java代理實現(xiàn)爬取代理IP的示例

    java代理實現(xiàn)爬取代理IP的示例

    今天小編就為大家分享一篇java代理實現(xiàn)爬取代理IP的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 關(guān)于@Valid注解大全以及用法規(guī)范

    關(guān)于@Valid注解大全以及用法規(guī)范

    這篇文章主要介紹了關(guān)于@Valid注解大全以及用法規(guī)范,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • SpringBoot 項目添加 MDC 日志鏈路追蹤的執(zhí)行流程

    SpringBoot 項目添加 MDC 日志鏈路追蹤的執(zhí)行流程

    日志鏈路追蹤就是將一個標志跨線程進行傳遞,在一般的小項目中也就是在你新起一個線程的時候,或者使用線程池執(zhí)行任務(wù)的時候會用到,比如追蹤一個用戶請求的完整執(zhí)行流程,本文給大家介紹SpringBoot MDC 日志鏈路追蹤的代碼,感興趣的朋友一起看看吧
    2021-06-06

最新評論