天天看點

【面試篇】Java建立線程的四種方式

1. 繼承Thread類實作多線程

    run()為線程類的核心方法,相當于主線程的main方法,是每個線程的入口

    a.一個線程調用 兩次start()方法将會抛出線程狀态異常,也就是的start()隻可以被調用一次 

    b.native生明的方法隻有方法名,沒有方法體。是本地方法,不是抽象方法,而是調用c語言方法

      registerNative()方法包含了所有與線程相關的作業系統方法

    c. run()方法是由jvm建立完本地作業系統級線程後回調的方法,不可以手動調用(否則就是普通方法)

2. 覆寫Runnable()接口實作多線程,而後同樣覆寫run().推薦此方式

    a.覆寫Runnable接口實作多線程可以避免單繼承局限

    b.當子類實作Runnable接口,此時子類和Thread的代理模式(子類負責真是業務的操作,thread負責資源排程與線程建立輔助真實業務。

繼承Thread和實作Runnable接口的差別

    a.實作Runnable接口避免多繼承局限

    b.實作Runnable()可以更好的展現共享的概念

3. 覆寫Callable接口實作多線程(JDK1.5)

    a.核心方法叫call()方法,有傳回值

    b.有傳回值

4. 通過線程池啟動多線程

通過Executor 的工具類可以建立三種類型的普通線程池:

FixThreadPool(int n); 固定大小的線程池

 使用于為了滿足資源管理需求而需要限制目前線程數量的場合。使用于負載比較重的伺服器。

SingleThreadPoolExecutor :單線程池

需要保證順序執行各個任務的場景 

CashedThreadPool(); 緩存線程池

當送出任務速度高于線程池中任務處理速度時,緩存線程池會不斷的建立線程

 适用于送出短期的異步小程式,以及負載較輕的伺服器

線程之間的狀态,及他們之間的互相轉換

【面試篇】Java建立線程的四種方式