什么是多線程?


基本概念:
串行:多個任務順序進行
並行:多個任務同時進行,物理上的同時發生。不影響
並發:多個任務在同一時間間隔進行,一起完成,邏輯上的同時發生。例如:cpu來回切換

進程和線程:
進程:正在運行的程序,是系統進行資源分配和調用的獨立單位,每個進程都有自己的內存空間和系統資源

單進程就是你的電腦一次只能運行一個程序

多進程是電腦可以同時聽歌和打游戲,但這不是並行執行,cpu一個時間只能做一件事情,是因為cpu在多個任務來回切換,屬於並發執行,切換速度快給人的感覺就像是同時執行

線程:
程序的執行單元,cpu調度的基本單位
單線程:程序只有一條執行路徑
多線程:程序有多條執行路徑
多線程的意義:
多線程的存在,不是為了提高程序的執行速度,而是為了提高程序的使用率和cpu利用率。
程序執行是為了搶到cpu的執行權,線程越多的進程,搶到執行權的幾率越大

實習線程的幾種方式

  • 繼承Thread類

    • 重寫run方法
    • 通過start調用啟動

      測試類
  • 實現Runnable接口

    • 重寫run
    • 把類作為參數傳到Thread里
    • 通過start調用

      測試類

獲取當前線程
public static Thread currentThread()
線程命名

  • setName

  • 構造

線程優先級
setPriority()

  • 只是修改概率,並不是優先級高就一定能搶到時間片
  • 優先級有1-10整數,默認為5
  • 放在start之前
    線程執行順序圖

優先級

線程的協同調度模型

  • 分時調度模型:所有線程輪流使用cup
  • 搶占式調度:一起搶,誰搶得到誰使用,優先級高的線程,搶到的概率大些
  • 弊端:時間不可控

休眠
Thread.sleep();

加入線程
join();

線程禮讓

  • 讓當前運行狀態的線程釋放自己的cpu資源,從運行狀態變為就緒
  • 變為就緒后重新和其他線程搶資源

守護線程(后台線程)
setDaemon(true)
主線程結束,守護線程也在一段時間跟着結束,沒有立馬結束是因為程序關閉的時間

jvm啟動是多線程

中斷線程
stop,讓線程停止,已過時,因為是暴力停止。不建議使用

interrupt,把線程狀態終止,並拋出lnterruptedException
interrup,不能直接終止線程,只是改變了當前線程的狀態

某個線程調用interrupt方法后,拋出異常,需要在線程方法中捕獲該異常並處理


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM