最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 創(chuàng)建線程的3種方法及各自的優(yōu)點

 更新時間:2020年07月18日 10:44:39   作者:zsq_fengchen  
這篇文章主要介紹了Java 創(chuàng)建線程的3種方法及各自的優(yōu)點,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下

1. 繼承 Thread 類,然后調用 start 方法。

 class MyThread extends Thread {
   //重寫run方法,線程運行后,跑的就是run方法 
   public void run(){
     //System.out.println("");
   }
  
   public static void main(String[] args){
     Thread t1 = new MyThread();
        t1.start(); //線程運行,調用的 run()方法.
   }
 }

2. 實現(xiàn) Runnable 接口的 run 方法, 然后再用 Thread 類包裹后,調用 start 方法。

 class TestThread implements Runnable{
  
   @Override
   public void run() {
     // implement run method here 
     //System.out.println("");
   }
  
   public static void main() {
     final TestThread obj = new TestThread();
     Thread t1 = new Thread(obj);
     t1.start();
   }
 
 }

3. 實現(xiàn) Callable 接口的 call 方法,用 FutureTask 類包裹 Callable 對象。然后再用 Thread 類包裹 FutureTask 類,并調用 start 方法。call() 方法可以有返回值。

class MyCallable implements Callable {
  @Override
  public Integer call() throws Exception {
    int sum = 0;
    for (int i = 1; i <= 100; i++) {
      sum += i;
    }
    return sum;
  }

  public static void main(String[] args) throws Exception {
    MyCallable mc = new MyCallable(); //實例化 callable

    FutureTask oneTask = new FutureTask(mc); //用FutureTask包裹
    Thread oneThread = new Thread(oneTask); //用Thread包裹
    oneThread.start();
    System.out.print(oneTask.get()); //獲取返回值
  }
}

Callable 方法在 Java 8 后,支持拉姆達表達式的寫法,可以創(chuàng)建一個 FutureTask 類,語句上不是太羅嗦。 Callable 方式有以下幾個優(yōu)點:

  • 可以捕獲線程上的異常。
  • 可以通過 get 方法得到返回值。
  • get 方法阻塞當前線程,直到調用的線程運行結束。
  • 可以取消線程的運行。

下面代碼演示了使用 FutureTask 類運行線程,捕獲異常的例子:

FutureTask<Integer> task=new FutureTask<Integer>(()->{
  throw new Exception("自定義異常");
});
 
new Thread(task).start();
 
try {
  System.out.println(task.get());
} catch (Exception e) {
  System.out.println(e.getMessage());
}

Java 6 之后,還可以通過創(chuàng)建線程池來創(chuàng)建線程,使用 ExecutorService 的 execute 方法:

 ExecutorService es = Executors.newCachedThreadPool();
 Runnable r = <your runnable here>;
 es.execute(r);

實現(xiàn)Runnable接口相對于繼承Thread類的優(yōu)勢:

   (1) 適合多個相同程序代碼的線程去處理同一資源的情況

   (2) 可以避免由于java單一繼承帶來的局限性

   (3) 用接口的方式將你的代碼和線程實現(xiàn)分離,更加清晰。

   (4) 通過繼承Thread類,每個線程都有一個相關聯(lián)的唯一對象,而實現(xiàn)Runnable接口,多線程可以共享同一個Runnable實例。

   (5) 增強了程序的健壯性,代碼能夠被多個線程共享,代碼與數(shù)據(jù)是獨立的。

以上就是Java 創(chuàng)建線程的3種方法及各自的優(yōu)點的詳細內容,更多關于JAVA 創(chuàng)建線程的資料請關注腳本之家其它相關文章!

相關文章

  • Java創(chuàng)建、識別條形碼和二維碼方法示例

    Java創(chuàng)建、識別條形碼和二維碼方法示例

    這篇文章主要給大家介紹了關于Java創(chuàng)建、識別條形碼和二維碼的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Java具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • SpringBoot解析@Value注解型解析注入時機及原理分析

    SpringBoot解析@Value注解型解析注入時機及原理分析

    @Value注解可以用來將外部的值動態(tài)注入到Bean中,可以獲取配置文件中的屬性值和通過SpEl表達式獲取bean的屬性或方法
    2024-12-12
  • Java方法上注解值修改不成功的問題

    Java方法上注解值修改不成功的問題

    這篇文章主要介紹了Java方法上注解值修改不成功的解決方法,本文結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • SpringBoot實現(xiàn)發(fā)送電子郵件

    SpringBoot實現(xiàn)發(fā)送電子郵件

    這篇文章主要介紹了SpringBoot實現(xiàn)發(fā)送電子郵件,電子郵件是—種用電子手段提供信息交換的通信方式,是互聯(lián)網(wǎng)應用最廣的服務。通過網(wǎng)絡的電子郵件系統(tǒng),用戶可以非常快速的方式,與世界上任何一個角落的網(wǎng)絡用戶聯(lián)系,下面就來看看SpringBoot如何實現(xiàn)發(fā)送電子郵件吧
    2022-01-01
  • 6種SpringBoot解決跨域請求的方法整理

    6種SpringBoot解決跨域請求的方法整理

    跨域資源共享是一種標準機制,允許服務器聲明哪些源可以訪問其資源,在SpringBoot應用中,有多種方式可以解決跨域問題,本文主要介紹了6種常見的解決方案,大家可以根據(jù)需求自行選擇
    2025-04-04
  • Springboot整合mybatis-plus使用pageHelper進行分頁(使用步驟)

    Springboot整合mybatis-plus使用pageHelper進行分頁(使用步驟)

    PageHelper是一個MyBatis分頁插件,可以方便地實現(xiàn)數(shù)據(jù)庫查詢結果的分頁功能,在Maven或Gradle項目中引入依賴,并在配置文件中進行配置,本文給大家介紹Springboot整合mybatis-plus使用pageHelper進行分頁,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • Spring P標簽的使用詳解

    Spring P標簽的使用詳解

    這篇文章主要介紹了Spring P標簽的使用詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Mybatis-plus?代碼生成器?AutoGenerator?的簡介和使用詳解

    Mybatis-plus?代碼生成器?AutoGenerator?的簡介和使用詳解

    AutoGenerator是MyBatis-Plus的代碼生成器,通過AutoGenerator可以快速生成?Entity、Mapper、Mapper XML、Service、Controller等各個模塊的代碼,極大的提升了開發(fā)效率,這篇文章主要介紹了Mybatis-plus代碼生成器AutoGenerator的簡介和使用,需要的朋友可以參考下
    2023-05-05
  • SpringBoot如何訪問不同的數(shù)據(jù)庫的方法實現(xiàn)

    SpringBoot如何訪問不同的數(shù)據(jù)庫的方法實現(xiàn)

    本文主要介紹了在SpringBoot應用中配置和管理多個數(shù)據(jù)源的方法,包括使用SpringBoot官方支持的配置方式和第三方庫實現(xiàn)多數(shù)據(jù)源配置,感興趣的可以了解一下
    2024-11-11
  • Java中用Mybatis插入mysql報主鍵重復的解決方案

    Java中用Mybatis插入mysql報主鍵重復的解決方案

    這篇文章主要介紹了Java中用Mybatis插入mysql報主鍵重復的解決方案,具有很好的參考價值,希望對大家有所幫助。
    2023-02-02

最新評論

梅州市| 含山县| 叙永县| 文化| 临城县| 故城县| 小金县| 巴青县| 大城县| 泰来县| 金昌市| 尚义县| 常州市| 赫章县| 富裕县| 宕昌县| 新闻| 徐水县| 通许县| 高雄市| 阿坝| 沁水县| 吉林市| 嘉义市| 黄梅县| 同江市| 沁源县| 江门市| 浦江县| 金阳县| 象山县| 屯昌县| 嫩江县| 韩城市| 山东省| 城市| 阿拉善左旗| 南康市| 泸定县| 西昌市| 仙游县|