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

Java線程的全方位詳解

 更新時間:2021年10月09日 15:44:27   作者:吾日三省賈斯汀  
Java 給多線程編程提供了內(nèi)置的支持。 一條線程指的是進程中一個單一順序的控制流,一個進程中可以并發(fā)多個線程,每條線程并行執(zhí)行不同的任務(wù),多線程是多任務(wù)的一種特別的形式,但多線程使用了更小的資源開銷

❤️‍大家好,我是賈斯汀,今天主要聊一聊關(guān)于線程的瓜!❤️‍

先來看一下線程這張圖線程的幾種運行狀態(tài)之間運行流程:

在這里插入圖片描述

看不懂沒關(guān)系,慢慢來學(xué)習,往下學(xué)習來繼續(xù)了解一下~

什么是線程?

  • 線程是進程的一部分,是程序執(zhí)行中的一條執(zhí)行路線;
  • 進程就是指程序在其自身地址空間的一次執(zhí)行活動,是程序獨立運行的基本單位;
  • 一個進程可以包含多條線程,一個條線程對應(yīng)一個進程中的一條執(zhí)行路線。

在這里插入圖片描述

線程的幾種創(chuàng)建方式?

主要由四種方式創(chuàng)建線程:

在這里插入圖片描述

  • 方式1:繼承Thread類,重寫run(),無返回值
  • 方式2:實現(xiàn)Runnable接口,重寫run(),無返回值
  • 方式3:新建FutureTask + 實現(xiàn)Callable接口,重寫call(),有返回值
  • 方式4:通過Executors工具類創(chuàng)建線程池 + 調(diào)用submit + 重寫Callable接口,重寫call(),有返回值

具體每一種創(chuàng)建方式說明及代碼實現(xiàn)如下:

/**
 * 創(chuàng)建Thread線程的四種方式之內(nèi)部類寫法
 */
public class NewThread {

    public static void main(String[] args) throws Exception {

        //方式1
        Thread t1 = new Thread(){
            @Override
            public void run() {
                System.out.println("方式1:繼承Thread類并重寫run()方法創(chuàng)建線程,無返回值");
            }
        };
        t1.start();
        Thread.sleep(1000);

        //方式2
        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("方式2:實現(xiàn)Runnable接口并重寫run()方法創(chuàng)建線程,無返回值");
            }
        });
        t2.start();
        Thread.sleep(1000);

        //方式3
        FutureTask<String> ft = new FutureTask<>(new Callable<String>() {
            @Override
            public String call() throws Exception {
                String result = "方式3:實現(xiàn)Callable接口并重寫call()方法新建FutureTask對象作為new Thread實例化參數(shù)創(chuàng)建線程,有返回值";
                return result;
            }
        });
        Thread t3 = new Thread(ft);
        t3.start();
        System.out.println(ft.get()); //輸出返回值

        Thread.sleep(1000);

        //方式4
        ExecutorService pool = Executors.newFixedThreadPool(5);
        Future<String> future = pool.submit(new Callable<String>(){
            @Override
            public String call() throws Exception {
                String result = "方式4:通過工具類Executors創(chuàng)建線程池,調(diào)用submit新建Future對象并重寫Callable接口重寫call()方法創(chuàng)建線程,有返回值";
                return result;
            }
        });
        pool.shutdown();//關(guān)閉線程池
        System.out.println(future.get()); //輸出返回值
    }
}

線程的幾種狀態(tài)?

  • 新建(new):通過上面介紹的某種方式新建線程即處于新建狀態(tài);
  • 就緒(Ready):調(diào)用線程的start()方法,首先進入就緒狀態(tài),等待獲取CPU時間;
  • 運行(Running):就緒狀態(tài)的線程獲取到CPU時間或阻塞狀態(tài)的線程恢復(fù)都可進入運行狀態(tài);
  • 阻塞(Blocked):運行狀態(tài)的線程可能因為IO阻塞或在synchronized同步代碼塊中都可進入阻塞狀態(tài);
  • 死亡(Dead):正常運行的線程執(zhí)行結(jié)束或就緒狀態(tài)的線程直接調(diào)用stop()方法就會進入死亡狀態(tài);
  • 睡眠(Sleeping):調(diào)用sleep方法指定線程睡眠多久,會釋放CPU資源,但不釋放鎖資源,睡眠時間到后會重新進入就緒狀態(tài);
  • 等待(Waiting):調(diào)用wait會讓線程短暫的處于等待中,會釋放CPU資源,并且釋放鎖資源,進入就緒狀態(tài)。

在這里插入圖片描述

線程相關(guān)的核心方法及作用?

  • start:調(diào)用start()方法底層源碼會判斷線程狀態(tài)是否是新建狀態(tài),不是則直接拋異常,并且后續(xù)會調(diào)用一個native本地方法start0,其底層通過JVM來進行調(diào)度最后調(diào)用run()方法執(zhí)行;
  • run:調(diào)用run()方法,底層會直接進入到重寫的run()方法并執(zhí)行代碼塊內(nèi)容;
  • sleep:屬于Thread類的一個native本地static靜態(tài)方法,可以在任何地方調(diào)用sleep(1000)方法,期間會讓當前線程進入睡眠狀態(tài)1秒鐘,并讓出CPU資源,但不釋放鎖資源
  • wait:屬于Object類的一個方法,只能在synchronized同步塊中進行調(diào)用wait(1000)方法,期間會讓當前線程進入等待狀態(tài)1秒鐘,不僅會讓出CPU時間,還釋放并釋放對象鎖資源
  • yield:跟sleep一樣,也是Thread類的一個native本地static靜態(tài)方法,與sleep的最大區(qū)別在于Thread.yield()不需要指定暫停時間,并不會阻塞線程,而是進入就緒狀態(tài),短暫的讓出CPU資源,這份CPU資源可能自己會再次獲取到,這個取決于調(diào)度器;
  • notify:同wait一樣,也是屬于Object類的一個方法,作用是可以將wait()后等待的線程進行單個喚醒,并進入Read就緒狀態(tài);
  • notifyAll:同notify一樣,也是屬于Object類的一個方法,作用將當前對象上的所有等待線程喚醒,并進入Read就緒狀態(tài);
  • stop:該方法已被廢棄,不建議使用,該方法的作用是直接將線程結(jié)束,進入死亡狀態(tài);
  • interrupt:沖斷線程,不保證線程進入死亡、就緒還是繼續(xù)運行,不想stop可以直接沖斷一個正在運行的線程。 What's up!不來個點贊支持一下,這手指是金子做的?

到此這篇關(guān)于Java線程的全方位詳解的文章就介紹到這了,更多相關(guān)Java 線程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JAVA內(nèi)存模型(JMM)詳解

    JAVA內(nèi)存模型(JMM)詳解

    這篇文章主要介紹了JAVA內(nèi)存模型(JMM)詳解的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Java中ArrayList的使用詳細介紹

    Java中ArrayList的使用詳細介紹

    這篇文章主要介紹了Java中ArrayList的使用,本文給大家詳細講述該相關(guān)的知識點,并且會通過大量的案例加以說明,需要的朋友可以參考一下
    2022-04-04
  • java通過snmp協(xié)議獲取物理設(shè)備信息

    java通過snmp協(xié)議獲取物理設(shè)備信息

    這篇文章主要介紹了java通過snmp協(xié)議獲取物理設(shè)備信息,snmp中文含義是簡單網(wǎng)絡(luò)管理協(xié)議,可用完成對計算機、路由器和其他網(wǎng)絡(luò)設(shè)備的遠程管理和監(jiān)視,本文我們是通過java程序來獲取,需要的朋友可以參考下
    2023-07-07
  • MyBatis3傳遞多個參數(shù)(Multiple Parameters)

    MyBatis3傳遞多個參數(shù)(Multiple Parameters)

    這篇文章主要介紹了MyBatis3傳遞多個參數(shù),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2020-07-07
  • 利用JAVA反射,讀取數(shù)據(jù)庫表名,自動生成對應(yīng)實體類的操作

    利用JAVA反射,讀取數(shù)據(jù)庫表名,自動生成對應(yīng)實體類的操作

    這篇文章主要介紹了利用JAVA反射,讀取數(shù)據(jù)庫表名,自動生成對應(yīng)實體類的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Java多線程三種主要實現(xiàn)方式解析

    Java多線程三種主要實現(xiàn)方式解析

    這篇文章主要介紹了Java多線程三種主要實現(xiàn)方式解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2020-07-07
  • Mybatis關(guān)聯(lián)映射舉例詳解

    Mybatis關(guān)聯(lián)映射舉例詳解

    關(guān)聯(lián)關(guān)系是面向?qū)ο蠓治?、面向?qū)ο笤O(shè)計最終的思想,Mybatis完全可以理解這種關(guān)聯(lián)關(guān)系,如果關(guān)系得當,Mybatis的關(guān)聯(lián)映射將可以大大簡化持久層數(shù)據(jù)的訪問
    2022-07-07
  • 使用Eclipse開發(fā)工具如何解決Java Compiler中Annotation Processin不出現(xiàn)的問題

    使用Eclipse開發(fā)工具如何解決Java Compiler中Annotation Processin不出現(xiàn)的問題

    這篇文章主要介紹了使用Eclipse開發(fā)工具如何解決Java Compiler中Annotation Processin不出現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2015-11-11
  • Java Stream 流的使用過程解析

    Java Stream 流的使用過程解析

    這篇文章主要介紹了Java Stream 流的使用過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2019-10-10
  • Java修改PowerPoint幻燈片批注信息

    Java修改PowerPoint幻燈片批注信息

    這篇文章主要介紹了Java修改PowerPoint幻燈片批注信息,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2020-05-05

最新評論

百色市| 托克逊县| 成安县| 昌平区| 从江县| 通化市| 彭州市| 荥阳市| 内乡县| 寿光市| 饶河县| 彭阳县| 安化县| 卓尼县| 马龙县| 岳池县| 福安市| 文山县| 焦作市| 文安县| 凤庆县| 佛坪县| 饶阳县| 古田县| 峡江县| 禄丰县| 沙坪坝区| 南京市| 云阳县| 平潭县| 镇原县| 安泽县| 五莲县| 白玉县| 扶绥县| 赤水市| 凤山县| 五常市| 北宁市| 多伦县| 舞阳县|