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

歡迎訪問 生活随笔!

生活随笔

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

java

Java线程简介

發布時間:2023/12/9 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java线程简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

主要是介紹一些線程相關的知識點,包括線程的生命周期,守護線程等,為后續的博客做一些鋪墊。

什么是線程

關于什么是線程,網上一大堆的介紹:

相對于進程,線程是操作系統(OS)調度的最小執行單元

線程的特點,根據線程的官方介紹可以看出:

  • java應用可以同時執行多個線程
  • 每個線程都有優先級,優先級高的線程優先于低優先級的線程執行
  • 線程在創建時可以設置為守護線程
  • 虛擬機啟動時會有一個非守護線程的,也就是main方法所在的線程
  • 當一個應用程序所有的非守護線程死亡時,jvm退出,同時所有守護線程被銷毀
  • 線程的創建有2種方式:繼承Thread類并覆寫run方法;在構造時傳入一個Runnable實現類參數
  • 每個線程都有一個名字用于標識線程
  • 幾個點需要說一下:

  • 當設置一個線程為守護線程時,只能在調用Start()方法前設置,否則拋出異常
  • 線程優先級分為1-10,默認為5
  • 死亡的線程無法再次被運行
  • 線程的生命周期

    線程的生命周期分為***新建狀態***、就緒狀態、運行狀態阻塞狀態死亡狀態 5種狀態,這5種狀態的轉換如下圖所示:

  • 調用new關鍵字,新建一個Thread實例對象有,實例對象就處于新建狀態。
  • 當Thread實例對象調用start()后,進入就緒狀態可以被cpu調度執行。
  • 就緒狀態的Thread實例對象,在獲取到cpu執行權后就可以運行。同時由于cpu的切換或者調用了線程的yield方法,會導致運行狀態的Thread回到就緒狀態。
  • 當運行狀態的線程遇到如下幾種情況時將進入阻塞狀態
    • wait()
    • sleep()
    • join()
    • 等待同步鎖
    • 阻塞式I/O調用
  • 阻塞狀態的線程恢復進入就緒狀態,當然在阻塞時線程被中斷,那么線程進入死亡狀態。
  • 運行狀態的線程正常運行完畢或者中斷異常都將進入死亡狀態。
  • 守護線程

    相對于正常線程,也就是所謂的用戶線程來說,守護線程主要是用于為用戶線程提供便利,這也是守護這個詞的含義,最典型的就是java系統的GC線程。

    當所有用戶線程退出時,守護線程就沒有服務對象也沒有存在的意義,所以隨著jvm的退出,所有的守護線程都會被銷毀,這也就是java文檔的說明。

    關于守護線程有如下幾個注意點:

  • 設置守護線程必須在線程start()之前
  • 守護線程里執行的代碼存在不完整執行的風險,所以涉及到數據計算保存的,需要有明確結果的操作不宜放在這里執行
  • 在守護線程下新建的線程也為守護線程
  • 關于第一點限制也很好理解,當你把啟動的用戶線程設置為守護線程時,可能剛好把唯一的用戶線程消滅了,然后jvm退出了,導致了第二點的問題。

    舉個例子驗證一下上面說的,所有用戶線程退出后jvm退出導致守護線程銷毀的說法:

    public class ThreadTest {public static void main(String[] args) {try {Thread thread = new Thread() {@Overridepublic void run() {try {int i = 0;while (true) {System.out.println(i++);Thread.sleep(200);}} catch (InterruptedException e) {e.printStackTrace();}}};thread.setDaemon(true);thread.start();Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}} } 復制代碼

    打印結果如下:

    0 1 2 3 4Process finished with exit code 0 復制代碼

    結果也很明顯,每200毫秒打印一個數字,等主線程sleep結束就退出了。

    如果把thread.setDaemon(true);注釋調可以看到,線程一直會打印到底。

    總結

  • 線程有5種狀態:新建狀態、就緒狀態、運行狀態、阻塞狀態死亡狀態
  • 線程有2種創建方式
  • 線程有優先級
  • 線程有名字
  • 守護線程需要在start()之前指定
  • 守護線程代碼可能執行不完整
  • 守護線程下新建的都是守護線程
  • 轉載于:https://juejin.im/post/5b9487005188255c5966e827

    總結

    以上是生活随笔為你收集整理的Java线程简介的全部內容,希望文章能夠幫你解決所遇到的問題。

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