日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java多线程系列(二):线程的五大状态,以及线程之间的通信与协作

發布時間:2024/7/5 java 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java多线程系列(二):线程的五大状态,以及线程之间的通信与协作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在Java面試的時候,經常會問到Java并發編程相關的多線程、線程池、線程鎖、線程通信等面試必考點,比如:

Java并發編程系列:Java線程池的使用方式,核心運行原理、以及注意事項

Java并發編程系列:4種常用Java線程鎖的特點,性能比較、使用場景

Java并發編程系列:CountDownLatch、Semaphore等4大并發工具類詳解

高并發編程系列:ConcurrentHashMap的實現原理(JDK1.7和JDK1.8)?

史上最強多線程面試44題和答案:線程鎖+線程池+線程同步等

今天主要分享多線程狀態流轉與通信,這也是面試中必考的基礎知識點。


多線程的基本概念

1.進程

進程是操作系統進行資源分配和調度的基本單位。


2.線程

線程是進程中的一個執行單元,負責當前進程中程序的執行,一個進程中至少有一個線程。

3.多線程

什么是多線程呢?即就是一個程序中有多個線程在同時執行。


線程的生命周期


java中每個線程都需經歷新生、就緒、運行、阻塞和死亡五種狀態,線程從新生到死亡的狀態變化稱為生命周期。


1.新建狀態

使用 new Thread 類或其子類建立一個線程對象后,該線程對象就處于新建狀態。

2.就緒狀態

調用了start()方法之后,該線程就進入就緒狀態(就緒隊列中),等待JVM里線程調度器的調度。

3.運行狀態

執行 run(),此時線程便處于運行狀態。處于運行狀態的線程最為復雜,它可以變為阻塞狀態、就緒狀態和死亡狀態。

4.阻塞狀態

如果一個線程執行了sleep(睡眠)、suspend(掛起)等方法,失去所占用資源之后,該線程就從運行狀態進入阻塞狀態。

5.死亡狀態

一個運行狀態的線程完成任務或者其他終止條件發生時,該線程就切換到終止狀態。

線程的調度策略

線程調度是指系統為線程分配處理器使用權的過程。

Java 使用的線程調度是搶占式調度,在搶占式調度下,優先級最高的任務一直執行,直到它進入等待或死亡狀態或更高優先級的任務出現,優先級高的線程比優先級低的線程優先執行。

在Java多線程環境中,為保證所有線程的執行能按照一定的規則執行,JVM實現了一個線程調度器,它定義了線程調度的策略。 在 JVM 中體現為讓可運行池中優先級高的線程擁有CPU 使用權。

線程之間的通信與協作



上面比較清楚的顯示了線程的狀態流轉,其實重點主要是掌握運行、阻塞、就緒之間的通信機制。

1.sleep()和yield()和join()


1)sleep()方法作用:讓當前線程睡眠一段時間,期間不會釋放任何持有的鎖。

2) yield()方法作用:讓出該線程的時間片給其它線程。線程調用了yield()方法,表示放棄當前獲得的CPU時間片,回到就緒狀態。最后由線程調度重新選擇就緒狀態的線程分配CPU資源。

3)join()方法作用:暫停當前線程,等待被調用線程指向結束之后再繼續執行。

注意:

1)sleep(long)方法僅釋放CPU使用權,鎖仍然占用。

2)調用join()的時候,當前線程不會釋放掉鎖。

2.wait()和notify() 方法和notifyAll()方法

1)wait()方法的作用:讓該線程處于等待狀態。

2)notify()方法的作用:喚醒處于wait的線程。

3)notifyAll()方法的作用:喚醒所有處于wait狀態的線程。

注意:

1)wait()方法會釋放CPU執行權 和 占有的鎖。

2) 線程調用wait()方法后,讓該線程處于等待狀態。進入這個狀態后,是不能自動喚醒的,必須依靠其他線程調用notify()或notifyAll()方法才能被喚醒。wait和notify必須配套使用,即必須使用同一把鎖調用。

你可能也喜歡:

  • Java多線程系列(七):并發容器的原理,7大并發容器詳解、及使用場景
  • Java多線程系列(一):最全面的Java多線程學習概述
  • Java多線程系列(六):深入詳解Synchronized同步鎖的底層實現
  • Java多線程系列(十):源碼剖析AQS的實現原理
  • Java多線程系列(五):線程池的實現原理、優點與風險、以及四種線程池實現
  • Java多線程系列(四):4種常用Java線程鎖的特點,性能比較、使用場景

  • 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的Java多线程系列(二):线程的五大状态,以及线程之间的通信与协作的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。