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

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

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

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

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

2:實(shí)現(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)建線程的三種方式的對(duì)比

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

  優(yōu)勢(shì):

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

   在這種方式下,多個(gè)線程可以共享同一個(gè)target對(duì)象,所以非常適合多個(gè)相同線程來(lái)處理同一份資源的情況,從而可以將CPU、代碼和數(shù)據(jù)分開(kāi),形成清晰的模型,較好地體現(xiàn)了面向?qū)ο蟮乃枷搿?/p>

   劣勢(shì):

 編程稍微復(fù)雜,如果要訪問(wèn)當(dāng)前線程,則必須使用Thread.currentThread()方法。

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

  優(yōu)勢(shì):

  編寫(xiě)簡(jiǎn)單,如果需要訪問(wèn)當(dāng)前線程,則無(wú)需使用Thread.currentThread()方法,直接使用this即可獲得當(dāng)前線程。

  劣勢(shì):

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

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

Runnable接口定義的run方法,Callable定義的是call方法。
run方法沒(méi)有返回值,call方法必須有返回值。
run方法無(wú)法拋出異常,call方法可以拋出checked exception。
Callable和Runnable都可以應(yīng)用于executors。而Thread類(lèi)只支持Runnable.

總結(jié)

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

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

相關(guān)文章

  • Java的ConcurrentHashMap原理深入分析

    Java的ConcurrentHashMap原理深入分析

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

    SpringBoot3整合Nacos?V2.3.2的詳細(xì)過(guò)程

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

    java7改善后的異常處理

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

    java編寫(xiě)冒泡排序的完整示例

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

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

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

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

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

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

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

    spring mvc 組合mybatis框架實(shí)例詳解

    本項(xiàng)目采用 maven 結(jié)構(gòu),主要演示了 spring mvc + mybatis,controller 獲取數(shù)據(jù)后以json 格式返回?cái)?shù)據(jù)。對(duì)spring mvc 組合mybatis的方法感興趣的朋友可以參考下本文
    2018-01-01
  • 關(guān)于Selenium的UI自動(dòng)化測(cè)試屏幕截圖功能實(shí)例代碼

    關(guān)于Selenium的UI自動(dòng)化測(cè)試屏幕截圖功能實(shí)例代碼

    今天小編就為大家分享一篇關(guān)于Selenium的UI自動(dòng)化測(cè)試屏幕截圖功能實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • 詳解如何為SpringBoot Web應(yīng)用的日志方便追蹤

    詳解如何為SpringBoot Web應(yīng)用的日志方便追蹤

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

最新評(píng)論

吉安县| 景洪市| 宜川县| 友谊县| 博乐市| 闵行区| 长沙市| 潼南县| 青浦区| 安塞县| 新丰县| 呼伦贝尔市| 抚松县| 林西县| 颍上县| 顺昌县| 新余市| 区。| 五大连池市| 息烽县| 砚山县| 老河口市| 仁怀市| 巴东县| 石狮市| 平谷区| 个旧市| 辉南县| 黄冈市| 建昌县| 小金县| 稷山县| 安顺市| 闸北区| 肇庆市| 六枝特区| 莎车县| 界首市| 大竹县| 凤庆县| 桃江县|