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

詳解Java創(chuàng)建多線程的四種方式以及優(yōu)缺點

 更新時間:2020年11月19日 16:43:23   作者:fking86  
這篇文章主要介紹了Java創(chuàng)建多線程的四種方式以及優(yōu)缺點,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

java有以下四種創(chuàng)建多線程的方式

1:繼承Thread類創(chuàng)建線程

2:實現(xiàn)Runnable接口創(chuàng)建線程

3:使用Callable和FutureTask創(chuàng)建線程

4:使用線程池,例如用Executor框架創(chuàng)建線程

DEMO代碼

package thread;
 
import java.util.concurrent.*;
 

public class ThreadTest {
 public static void main(String[] args) throws ExecutionException, InterruptedException {
//  創(chuàng)建線程的第一種方法
  Thread1 thread1 = new Thread1();
  thread1.start();
 
//  創(chuàng)建線程的第二種方法
  Thread2 thread2 = new Thread2();
  Thread thread = new Thread(thread2);
  thread.start();
 
//  創(chuàng)建線程的第三種方法
  Callable<String> callable = new Thread3();
  FutureTask<String> futureTask = new FutureTask<>(callable);
  Thread thread3 = new Thread(futureTask);
  thread3.start();
  String s = futureTask.get();
  System.out.println(s);
 
//  創(chuàng)建線程的第四種方法
  Executor executor = Executors.newFixedThreadPool(5);
  executor.execute(new Runnable() {
   @Override
   public void run() {
    System.out.println(Thread.currentThread()+"創(chuàng)建線程的第四種方法");
   }
  });
  ((ExecutorService) executor).shutdown();
 
 }
}
class Thread1 extends Thread{
 @Override
 public void run() {
  System.out.println(Thread.currentThread()+"創(chuàng)建線程的第一種方法");
 }
}
 
class Thread2 implements Runnable {
 
 @Override
 public void run() {
  System.out.println(Thread.currentThread()+"創(chuàng)建線程的第二種方法");
 }
}
 
class Thread3 implements Callable<String> {
 
 @Override
 public String call() throws Exception {
  return Thread.currentThread()+"創(chuàng)建線程的第三種方法";
 }
}

創(chuàng)建線程的三種方式的對比

1、采用實現(xiàn)Runnable、Callable接口的方式創(chuàng)建多線程

  優(yōu)勢:

   線程類只是實現(xiàn)了Runnable接口或Callable接口,還可以繼承其他類。

   在這種方式下,多個線程可以共享同一個target對象,所以非常適合多個相同線程來處理同一份資源的情況,從而可以將CPU、代碼和數(shù)據(jù)分開,形成清晰的模型,較好地體現(xiàn)了面向對象的思想。

   劣勢:

 編程稍微復雜,如果要訪問當前線程,則必須使用Thread.currentThread()方法。

2、使用繼承Thread類的方式創(chuàng)建多線程

  優(yōu)勢:

  編寫簡單,如果需要訪問當前線程,則無需使用Thread.currentThread()方法,直接使用this即可獲得當前線程。

  劣勢:

  線程類已經(jīng)繼承了Thread類,所以不能再繼承其他父類。

3、Runnable和Callable的區(qū)別

Runnable接口定義的run方法,Callable定義的是call方法。
run方法沒有返回值,call方法必須有返回值。
run方法無法拋出異常,call方法可以拋出checked exception。
Callable和Runnable都可以應用于executors。而Thread類只支持Runnable.

總結

鑒于上面分析,因此一般推薦采用實現(xiàn)Runnable接口、Callable接口的方式來創(chuàng)建多線程。

到此這篇關于Java創(chuàng)建多線程的四種方式以及優(yōu)缺點的文章就介紹到這了,更多相關Java創(chuàng)建多線程內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java的ConcurrentHashMap原理深入分析

    Java的ConcurrentHashMap原理深入分析

    這篇文章主要介紹了Java的ConcurrentHashMap原理深入分析,集合是編程中最常用的數(shù)據(jù)結構,而談到并發(fā),幾乎總是離不開集合這類高級數(shù)據(jù)結構的支持,需要的朋友可以參考下
    2023-07-07
  • SpringBoot3整合Nacos?V2.3.2的詳細過程

    SpringBoot3整合Nacos?V2.3.2的詳細過程

    本文介紹了如何在?Spring?Boot?3.2.x?項目中整合?Nacos?2.3.2,包括依賴配置、Nacos?服務發(fā)現(xiàn)與動態(tài)配置的配置方法,通過整合?Nacos,Spring?Boot?應用可以實現(xiàn)高效的服務發(fā)現(xiàn)、動態(tài)配置管理以及分布式系統(tǒng)中的靈活擴展,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • java7改善后的異常處理

    java7改善后的異常處理

    在本篇文章里小編給大家整理的是關于java7改善后的異常處理知識點總結,有需要的朋友們參考下。
    2019-11-11
  • java編寫冒泡排序的完整示例

    java編寫冒泡排序的完整示例

    這篇文章主要給大家介紹了關于java編寫冒泡排序的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Java怎么重命名?Amazon?S3?中的文件和文件夾

    Java怎么重命名?Amazon?S3?中的文件和文件夾

    在本文中,我們探討了使用適用于 Java 的 AWS 開發(fā)工具包重命名 S3 存儲桶中的文件和文件夾的方法,我們探索了兩種不同的情況,它們使用相同的概念來重命名對象,用新名稱復制它們并刪除原始名稱
    2023-10-10
  • idea +junit單元測試獲取不到bean注入的解決方式

    idea +junit單元測試獲取不到bean注入的解決方式

    這篇文章主要介紹了idea +junit單元測試獲取不到bean注入的解決方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Java之Spring Boot創(chuàng)建和使用

    Java之Spring Boot創(chuàng)建和使用

    Spring 的誕生就是為了簡化 Java 程序的開發(fā)的.Spring Boot 的誕生就是為了簡化 Spring 程序開發(fā)的,對Springboot感興趣的同學可以借鑒本文
    2023-04-04
  • spring mvc 組合mybatis框架實例詳解

    spring mvc 組合mybatis框架實例詳解

    本項目采用 maven 結構,主要演示了 spring mvc + mybatis,controller 獲取數(shù)據(jù)后以json 格式返回數(shù)據(jù)。對spring mvc 組合mybatis的方法感興趣的朋友可以參考下本文
    2018-01-01
  • 關于Selenium的UI自動化測試屏幕截圖功能實例代碼

    關于Selenium的UI自動化測試屏幕截圖功能實例代碼

    今天小編就為大家分享一篇關于Selenium的UI自動化測試屏幕截圖功能實例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 詳解如何為SpringBoot Web應用的日志方便追蹤

    詳解如何為SpringBoot Web應用的日志方便追蹤

    在Web應用程序領域,有效的請求監(jiān)控和可追溯性對于維護系統(tǒng)完整性和診斷問題至關重要,SpringBoot是一種用于構建Java應用程序的流行框架,在本文中,我們探討了在SpringBoot中向日志添加唯一ID的重要性,需要的朋友可以參考下
    2023-11-11

最新評論

阳城县| 江陵县| 上蔡县| 汾西县| 长乐市| 淅川县| 马尔康县| 云浮市| 珠海市| 荥经县| 高密市| 平定县| 彭泽县| 乌审旗| 蕉岭县| 行唐县| 黄骅市| 尼木县| 新余市| 蒲城县| 怀安县| 肥东县| 什邡市| 韶山市| 郓城县| 渝北区| 化州市| 蓝山县| 始兴县| 济南市| 江北区| 白山市| 宾阳县| 东丽区| 耒阳市| 玉林市| 荣成市| 张家口市| 平湖市| 辽宁省| 大荔县|