java基础之线程参考尚硅谷视频
程序
為完成特定的任務,用某種語言編寫的一組指令的集合即一段靜態的代碼,靜態對象
進程
程序的一次執行過程,或是在運行的一個程序是一個動態的過程:有它自身的產生、存在和消亡的過程——生命周期
程序是靜態的,進程‘是動態的
進程作為資源分配的單位,系統在運行時會為每個進程分配不同的內存區域
線程
進程可進一步細化為線程,是一個程序內部的一條執行路線
若一個進程同一時間并行執行多個線程,就是支持多線程
線程作為調度和執行的單位,每個線程擁有獨立運行的棧和程序計數器線程切換的、開銷小
一個進程中的多個線程共享相同的內存空間/內存地址空間->他們從同一堆中分配對象,可以訪問相同的變量和對象。這就是進程間通信更簡單、高效。但多個線程操作共享的系統資源可能就會帶來安全的隱患
單核CPU和多核CPU
單核CPU其實是一種假的多線程因為在一個時間‘單元內,也只能執行一個線程的任務,多核CPU才能更好的發揮多線程的效率
并行和并發
并行:多個CPU同時執行多個任務
并發:一個CPU(采用時間片)同時執行多個任務
多線程的創建
方式一(繼承與Thread類)
1.創建一個繼承與Thread類的子類
2.重新Thread類的子類run() -->將此線程的‘執行操作聲明在run中
3.創建Thread類的子類對象
4.通過此對象調用start();(1.啟動當前線程,2調用當前線程的run)
常用方法
start():啟動當前線程,調用當前進程的run()
run():通常需要重寫Thread類中的方法,將創建的線程要執行的操作聲明在、此方法中
currentThread():靜態方法,返回執行當前代碼的線程
getName():獲取當前線程的名字
setName();設置當前線程的名字
yield():釋放當前CPU的執行權
join():在線程b中調用線程a的Join(),此時線程b進入阻塞狀態,直到線程a執行完畢,線程b才結束阻塞狀態
sleep(long long t):讓當前線程睡眠t毫秒,在指定的t毫秒內當前線程處于阻塞狀態
isAilve():判斷當前線程是否存活
調度策略
- 時間片
- 搶占式:優先級高的CPU搶占優先級
java調度方法
同優先級線程組成先進先出隊列(先到先服務),使用時間片
對于搞優先級,使用優先調度的搶占式策略
線程優先級
MAX_PRIORITY:10
MIN_PRIORITY: 1
NORM_PRIORITY:5 ---->默認優先級
如何獲取和設置當前進程的優先級
getPriority() :獲取當前線程的優先級
setPriority(int p):設置當前線程的優先級
說明:高優先級的線程要搶占低優先級線程CPU的執行權。但只是從概率上講,高優先級的線程高概率的情況下被執行。并不意味著只有高優先級的線程執行完以后,低優先級的線程才執行
創建多線程方式二
創建一個實現Runnable接口的類
實現類去實現Runnbale中的抽象方法:run()
創建實現類的對象
將此對象作為參數傳遞到Thread類中的構造器,創建Thread類的對象
通過Thread類調用run()方法()(調用當前線程,調用當前線程的run())
兩種方式的比較
開發中優先選擇實現Runnable接口的方式
原因:1實現的方式沒有類的單繼承性的局限性
2.實現的方式更合適來出來多個線程有共享數據的情況
總結
以上是生活随笔為你收集整理的java基础之线程参考尚硅谷视频的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在命令行英雄的浏览器大战中,JavaSc
- 下一篇: comsol快速入门指南