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

Java進(jìn)階必備之多線程編程

 更新時(shí)間:2021年05月17日 10:23:27   作者:布小禪  
今天帶大家來學(xué)習(xí)java多線程編程,文中有非常詳細(xì)的代碼示例及介紹,對(duì)正在學(xué)習(xí)java多線程的小伙伴們很有幫助,需要的朋友可以參考下

一、圖示

在這里插入圖片描述

二、多線程編程

何為多線程,通俗的講就是讓你的代碼同時(shí)干好幾件事。

而我們的一個(gè)代碼文件或者一個(gè)項(xiàng)目就是一個(gè)進(jìn)程,而如果我們想提高效率,我們可以多開幾個(gè)文件進(jìn)行多進(jìn)程,也可以在進(jìn)程中創(chuàng)建多線程(多寫幾個(gè)方法),但是多進(jìn)程比較耗費(fèi)資源,所以一般推薦多線程,在代碼里,讓代碼做幾個(gè)文件做的事。

多線程編程可以讓我們的代碼擁有更高效率。

三、線程的工作過程

猶如上圖

使用多線程需要先創(chuàng)建一個(gè)或者多個(gè)線程

然后讓線程調(diào)用CPU資源,開始運(yùn)行

然后運(yùn)行完畢等待所有線程運(yùn)行完畢

然后刪除資源,結(jié)束線程

Java線程擁有優(yōu)先級(jí)

優(yōu)先級(jí)就是系統(tǒng)確定線程的調(diào)度順序,但是不執(zhí)行順序,因?yàn)槎嗑€程的執(zhí)行是具有無序性的。

調(diào)度順序只是系統(tǒng)分配資源的順序,不分配資源就無法執(zhí)行。

四、創(chuàng)建多線程

如何在Java代碼中創(chuàng)建多線程,Java內(nèi)置了用于多線程的庫。

1.繼承Thread類,重寫run()方法

我們需要寫一個(gè)類A來繼承Thread類,并重寫run()方法。

run()方法里面放我們需要進(jìn)行多線程的代碼。

然后再在主類中實(shí)例化類A的對(duì)象,并且調(diào)用strat方法。

public  class TheadText  {
    public static void main(String[] args) {
        //實(shí)例化StartThread,并調(diào)用start方法使線程動(dòng)起來
        StartThread t1 = new StartThread("一  ");
        t1.start();
        StartThread t2 = new StartThread("二  ");
        t2.start();
        StartThread t3 = new StartThread("三  ");
        t3.start();
        StartThread t4 = new StartThread("四  ");
        t4.start();
    }
}

/**
 * 1.繼承Thread類并重寫run方法
 */
 class StartThread extends Thread{

     String name;
     StartThread(String name){
         this.name = name;
     }
    @Override
    public void run() {

       System.out.println(name+1);
       System.out.println(name+2);
       System.out.println(name+3);
       System.out.println(name+4);
       System.out.println(name+5);
     }
 }

運(yùn)行結(jié)果(還可以體現(xiàn)線程的無序性):

2. 實(shí)現(xiàn)接口Runnable接口,實(shí)現(xiàn)run方法

使用Runnable接口避免了單繼承的局限性,線程類只是實(shí)現(xiàn)了 Runnable 接口,還可以繼承其他類

public  class TheadText  {
    public static void main(String[] args) {
		StartRunnable startRunnable1 = new StartRunnable("  一  ");
        Thread te1 = new Thread(startRunnable1);
        te1.start();
        StartRunnable startRunnable2 = new StartRunnable("  二  ");
        Thread te2 = new Thread(startRunnable2);
        te2.start();
        StartRunnable startRunnable3 = new StartRunnable("  三  ");
        Thread te3 = new Thread(startRunnable3);
        te3.start();
        StartRunnable startRunnable4 = new StartRunnable("  四  ");
        Thread te4 = new Thread(startRunnable4);
        te4.start();
	}
}
/**
 * 2. 實(shí)現(xiàn)Runnable接口,實(shí)現(xiàn)run方法
 */
 class StartRunnable implements Runnable{
     String name;
//     重載一下方法,利于區(qū)分
     StartRunnable(String name){
         this.name = name;
     }
     @Override
     public void run() {
         System.out.println(name+1);
         System.out.println(name+2);
         System.out.println(name+3);
         System.out.println(name+4);
         System.out.println(name+5);
     }

 }

運(yùn)行結(jié)果:

在這里插入圖片描述

3. 實(shí)現(xiàn)Callable接口,實(shí)現(xiàn)call方法

這個(gè)我研究了挺大一會(huì)兒。

實(shí)現(xiàn)這個(gè)接口后,還需要實(shí)現(xiàn)call方法

然后通過FutureTask類來對(duì)我們實(shí)例化對(duì)象進(jìn)行封裝

最后還要實(shí)例化Thread類進(jìn)行start操作開啟我們的線程

代碼演示:

public  class TheadText  {
    public static void main(String[] args) {
        //先實(shí)例化
        StartCallable a = new StartCallable();
        //然后調(diào)用FutureTask類
        FutureTask<String> te1 = new FutureTask<>(a);
        //設(shè)置我們的name屬性
        a.name = "  一  ";
        //開啟我們的線程一
        new Thread(te1).start();
        StartCallable b = new StartCallable();
        FutureTask<String> te2 = new FutureTask<>(b);
        b.name = "  二  ";
        new Thread(te2).start();
        StartCallable c = new StartCallable();
        FutureTask<String> te3 = new FutureTask<>(c);
        c.name = "  三  ";
        new Thread(te3).start();
        StartCallable d = new StartCallable();
        FutureTask<String> te4 = new FutureTask<>(d);
        d.name = "  四  ";
        new Thread(te4).start();

    }
}
/**
 * 實(shí)現(xiàn)Callable接口,實(shí)現(xiàn)call方法
 */
 class StartCallable implements Callable<String>{
     String name ;
     public String call() throws Exception{
         System.out.println(name+1);
         System.out.println(name+2);
         System.out.println(name+3);
         System.out.println(name+4);
         return name;
     }
 }

運(yùn)行結(jié)果:

在這里插入圖片描述

線程的生命周期

線程在我們創(chuàng)建后(出生)等待CPU的資源分配,然后開始工作,在工作完我們分配的工作后,就會(huì)(死亡)消失

到此這篇關(guān)于Java進(jìn)階必備之多線程編程的文章就介紹到這了,更多相關(guān)Java多線程編程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java索引越界異常Exception java.lang.IndexOutOfBoundsException的解決

    Java索引越界異常Exception java.lang.IndexOutOfBoundsException

    本文主要介紹了Java索引越界異常Exception java.lang.IndexOutOfBoundsException的解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Spring 使用注解方式進(jìn)行事務(wù)管理配置方式

    Spring 使用注解方式進(jìn)行事務(wù)管理配置方式

    本篇文章主要介紹了Spring 使用注解方式進(jìn)行事務(wù)管理配置方式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • SpringBoot整合Netty心跳機(jī)制過程詳解

    SpringBoot整合Netty心跳機(jī)制過程詳解

    這篇文章主要介紹了SpringBoot整合Netty心跳機(jī)制過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • nacos在mac上部署提示找不到或無法加載主類的解決

    nacos在mac上部署提示找不到或無法加載主類的解決

    這篇文章主要介紹了nacos在mac上部署提示找不到或無法加載主類的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Java swing框架實(shí)現(xiàn)的貪吃蛇游戲完整示例

    Java swing框架實(shí)現(xiàn)的貪吃蛇游戲完整示例

    這篇文章主要介紹了Java swing框架實(shí)現(xiàn)的貪吃蛇游戲,結(jié)合完整實(shí)例形式分析了java使用swing框架結(jié)合awt圖形繪制實(shí)現(xiàn)貪吃蛇游戲的具體步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-12-12
  • Java連接MYSQL數(shù)據(jù)庫的詳細(xì)步驟

    Java連接MYSQL數(shù)據(jù)庫的詳細(xì)步驟

    這篇文章主要為大家介紹了Java連接MYSQL數(shù)據(jù)庫的詳細(xì)步驟,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Druid核心源碼解析DruidDataSource

    Druid核心源碼解析DruidDataSource

    這篇文章主要為大家介紹了Druid核心源碼解析DruidDataSource,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • JAVAEE項(xiàng)目結(jié)構(gòu)以及并發(fā)隨想

    JAVAEE項(xiàng)目結(jié)構(gòu)以及并發(fā)隨想

    每個(gè)代碼里面的工具都是工具,API是你最需要理解的,哪個(gè)好,哪個(gè)不好,沒有準(zhǔn)確答案。 一切皆對(duì)象,對(duì)于Java來講是純粹的,代理是對(duì)象,反射是對(duì)象,對(duì)象是對(duì)象,基本數(shù)據(jù)類型不是對(duì)象。
    2016-04-04
  • springboot如何獲取文件流

    springboot如何獲取文件流

    這篇文章主要介紹了springboot如何獲取文件流,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 使用Spring?Cloud?Stream處理Java消息流的操作流程

    使用Spring?Cloud?Stream處理Java消息流的操作流程

    Spring?Cloud?Stream是一個(gè)用于構(gòu)建消息驅(qū)動(dòng)微服務(wù)的框架,能夠與各種消息中間件集成,如RabbitMQ、Kafka等,今天我們來探討如何使用Spring?Cloud?Stream來處理Java消息流,需要的朋友可以參考下
    2024-08-08

最新評(píng)論

富民县| 阳原县| 开封县| 浦江县| 铁岭县| 广元市| 若羌县| 建德市| 蛟河市| 汤阴县| 马龙县| 大渡口区| 泰顺县| 井陉县| 沅江市| 金门县| 遵化市| 福贡县| 淮滨县| 高要市| 南川市| 屏山县| 柘荣县| 洛浦县| 莲花县| 扎囊县| 墨竹工卡县| 麻江县| 内乡县| 钟山县| 慈利县| 当雄县| 新安县| 通海县| 桃江县| 黄平县| 安平县| 大埔区| 屯留县| 宝丰县| 仁化县|