學習-java多線程

線程的創建

*繼承Tread,重寫run
*實現Runnable接口,重寫run() [匿名內部類]
*實現callable接口(有結果返回)

線程的常用方法

調用join保證這個方法先執行完成,

線程安全

并發編程

進程:就相當一個程序的實例
線程:就是指令流(一個進程包含多個線程)

并發:同一時間。一個cpu輪流執行
并行:兩cup同時工作

lamda簡化匿名內部類的寫法

JVM:堆,棧,方法區
是線程用的,(后進先出)(執行完就會釋放)
? ? ? ? *有多個棧幀組成,對應著每次方法調用時所占的內存
? ? ? ? *每個線程只能有一個活動棧幀,對應正在執行的方法
? ? ? ? 遞歸會導致棧溢出

一個線程一個棧,一個方法一個棧幀

棧和棧幀
程序啟動 在jvm的加載機制

1,將代碼加載到 方法區(類加載)
2,棧啟動mian主線程:? 然后給線程的方法分配棧幀
new出來的對象放堆,方法執行完棧幀就會釋放
線程的棧幀是獨立的(程序計數器記錄每個線程的執行到哪里-記錄當前線程的狀態
操作系統的任務調度器 分配時間片

上下文切換
讓出cpu的時候
程序計數器d
記錄當前線程的狀態等信息(局部變量,等)
頻繁的切換會影響性能

常見方法

start() 線程進入就緒狀態? ?不能多次啟動 會報錯
run 新線程啟動后會調用
join 等待線程運行結束
優先級(1-10)默認5-(cup空閑的時候 幾乎沒有用)
getStatus
isAlive

線程的狀態有哪些5種
1,new
2,runnable就緒(
3,running運行
4 阻塞
5,Terminated終止

java線程的狀態有哪些6種
1,new
2,runnable就緒()運行中的
3,blocked?阻塞(synchronize)
4,Waiting 等待-要喚醒 (join)
5,Timed Waiting?計時等待 -阻塞(sleep)
6,Terminated終止

sleep:
*調用會 計時等待(線程狀態:runing變Timed Waiting(阻塞讓出cup):類似于等待狀態
*通過其他線程調用interrupted(),打斷睡眠(會拋interrupted異常)
*睡眠結束后 未必立即執行(讓出cup)
*TimeUnit的sleep可讀性更好 可以替換thread的sleep
*阻塞線程

yield:
*
調用會 計時等待(線程狀態:runing變runable(就緒))讓出cup 如果沒有其他操作還是會執行
*讓給優先級高的,
*不阻塞線程

join
*等待線程運行結束-達到同步的目的,
*阻塞線程
join(long tim)最多等待

interrupt 打斷

打斷阻塞的線程 例如 sleep,wait,join
異常打斷:(打斷標記 flose)例如程序在執行sleep的時候? 清除標記
正常常打斷:(打斷標記 true)
isinterrupt ?不會清除標記

park 停止
打斷標記為真的時候 失效

守護線程
*正常:java要等待所有線程結束才會結束,(不然主線程結束 子線程一樣執行)
*如果非守護線程都結束,守護線程也強制結束(如果子線程是守護線程,主線程結束他也結束)
-垃圾回收就是守護線程

共享模型

synchronize工作
*monitor(監控系統提高的)重量級鎖
*輕量級鎖(翻書包看看是誰的)
*偏向鎖(寫上名字)可以批量修改重偏向
每一次都可能向上升級

輕量級鎖:(如果有競爭會升級為重量級) 棧幀是對輕量級鎖的實現
*訪問時間是錯開的
????????鎖膨脹:就是嘗試加輕量級鎖失敗,升級為重量鎖

重入鎖:就是同一個對象再次如鎖+1

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/207120.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/207120.shtml
英文地址,請注明出處:http://en.pswp.cn/news/207120.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

無重復字符的最長子串-中等

leetcode地址 給定一個字符串 s ,請你找出其中不含有重復字符的 最長子串 的長度。 示例 1:輸入: s "abcabcbb" 輸出: 3 解釋: 因為無重復字符的最長子串是 "abc",所以其長度為 3。 示例 2:輸入: s "bbbbb" 輸出: 1 …

我有才打造私域流量的知識付費小程序平臺

在當今數字化時代,知識付費市場正在迅速崛起,而私域流量的概念也日益受到重視。私域流量指的是企業通過自有渠道獲取的、能夠自由支配的流量,這種流量具有更高的用戶粘性和轉化率。因此,打造一個基于私域流量的知識付費小程序平臺…

實現:切換頁面切換標題,擴展 vue-router 的類型

布局容器-頁面標題 網址:https://router.vuejs.org/zh/guide/advanced/meta 給每一個路由添加 元信息 數據 router/index.ts const router createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [{ path: /login, component: () > im…

問題:數組對象去重

問題:數組對象去重 var arr [{name: ‘a’,id: 1}, {name: ‘a’,id: 2}, {name: ‘b’,id: 3}, {name: ‘c’,id: 4}, {name: ‘c’,id: 6}, {name: ‘b’,id: 6}, {name: ‘d’,id: 7}]; 對數組對象name進行去重處理, 結果顯示為: [{name…

第一啟富金:新添澳大利亞(ASIC)牌照

第一啟富金:澳大利亞證券及投資委員會(ASIC) GOLDWELL GLOBAL PTY LTD 是 WHOLESALE INVESTOR SERVICES PTY LTD(CAR 編號 001304943)的企業授權代表開發澳大利亞客戶,WHOLESALE INVESTOR SERVICES PTY LT…

XML是什么

XML是是什么? XML(Extensible Markup Language),中文是可擴展標記語言,是標準通用標記語言的子集。它是一種標記語言,用于標記電子文檔,使其結構化。 XML可以用來標記數據,定義數據…

【軟件推薦】文本轉語音,語音轉wav,導入ue5

文字轉語音 在線免費文字轉語音 - TTSMaker官網 | 馬克配音https://ttsmaker.cn/ 文件轉換器 語音轉wav Convertio — 文件轉換器https://convertio.co/zh/

C#應用:MQTT分析——CONNECT為例子

源代碼: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net.Sockets;namespace ConsoleApp1 {class Program{static void Main(string[] args){Connect();}/// <summary>/// 向…

HarmonyOS應用程序框架——UIAbility實操

UIAbility概述 UIAbility是一種包含用戶界面的應用組件&#xff0c;主要用于和用戶進行交互。UIAbility也是系統調度的單元&#xff0c;為應用提供窗口在其中繪制界面。 每一個UIAbility實例&#xff0c;都對應于一個最近任務列表中的任務。 一個應用可以有一個UIAbility&…

Leetcode—901.股票價格跨度【中等】

2023每日刷題&#xff08;五十二&#xff09; Leetcode—901.股票價格跨度 算法思想 實現代碼 class StockSpanner { public:stack<pair<int, int>> st;int curday -1;StockSpanner() {st.emplace(-1, INT_MAX);}int next(int price) {while(price > st.top(…

油猴(Tampermonkey)瀏覽器插件簡單自定義腳本開發

介紹 瀏覽器插件&#xff0c;包括油猴插件和其他插件&#xff0c;通過它們可以實現瀏覽器網頁的定制化與功能增強。 其他插件一般只有某種具體的功能&#xff0c;且已經寫死而不能更改&#xff0c;比如Adblock插件只用于去廣告。 油猴插件是一款用于管理用戶腳本的插件&…

使用Rust 構建C 組件

協議解析&#xff0c;這不就很快了&#xff0c;而且原生的標準庫紅黑樹和avl 樹支持&#xff0c;異步tokio 這些庫&#xff0c;編寫應用組件就很快了 rust 標準庫不支持 unix 的消息隊列&#xff0c;但是支持 shm 和 uds&#xff0c;后者從多方面考慮都比&#xff0c;消息隊列更…

教育類直播介紹

教育類直播是一種在線教育形式&#xff0c;它允許學生和教師通過實時視頻通話進行互動學習。這種學習方式可以為學生提供更靈活的學習時間和地點&#xff0c;同時也可以幫助教師更好地與學生進行互動和指導。 在教育類直播中&#xff0c;學生可以通過網絡與教師和其他學生進行…

c/c++中一些不常用但有用的知識

1.變長數組 bool fun(int cnt) {unsigned char data[cnt];return true; } 在 C 語言中&#xff0c;變長數組&#xff08;Variable Length Arrays&#xff0c;VLA&#xff09;是 C99 標準引入的特性&#xff0c;允許使用變量來定義數組的長度。因此&#xff0c;在 C 版本的代碼…

快速在VMware虛擬機上運行Kali Linux(保姆級教程)

本期將演示如何在VMware虛擬機上快速、輕松地安裝Kali Linux。Kali Linux是一款專為滲透測試和網絡安全而設計的操作系統&#xff0c;擁有很多強大的工具和功能。 在運行任何虛擬機之前&#xff0c;一定要先確保已經打開主板BIOS上的虛擬化支持。 下載VMware 接著來到vmware的…

vue 一直運行 /sockjs-node/info?及 /sockjs-node/info報錯解決辦法

sockjs-node介紹 sockjs-node 是一個JavaScript庫&#xff0c;提供跨瀏覽器JavaScript的API&#xff0c;創建了一個低延遲、全雙工的瀏覽器和web服務器之間通信通道。 服務端&#xff1a;sockjs-node&#xff08;https://github.com/sockjs/sockjs-node&#xff09; 客戶端&a…

[全志Tina/Linux]全志修改bootlogo分區數據從而修改bootlogo

一、需求 在不進行鏡像燒錄的情況下&#xff0c;通過啟動項或腳本將已存在于主板的bootlogo文件更新到bootlogo分區中&#xff0c;從而實現bootlogo的更新 二、操作 1、在主板上查找bootlogo文件路徑 find -name bootlogo* 實機效果&#xff1a; 2、進入文件夾路徑 cd ./d…

Java網絡編程——對象的序列化與反序列化

當兩個進程進行遠程通信時&#xff0c;彼此可以發送各種類型的數據&#xff0c;如文本、圖片、語音和視頻等。無論是何種類型的數據&#xff0c;都會以二進制序列的形式在網絡上傳送。當兩個Java進程進行遠程通信時&#xff0c;一個進程能否把一個Java對象發送給另一個進程呢&a…

LeetCode 每日一題 Day 6(DFS+BFS)

1466. 重新規劃路線 n 座城市&#xff0c;從 0 到 n-1 編號&#xff0c;其間共有 n-1 條路線。因此&#xff0c;要想在兩座不同城市之間旅行只有唯一一條路線可供選擇&#xff08;路線網形成一顆樹&#xff09;。去年&#xff0c;交通運輸部決定重新規劃路線&#xff0c;以改變…

c語言詞法分析器

詞法分析器&#xff08;也稱為詞法解析器或詞法掃描器&#xff09;是編譯器的一個組成部分&#xff0c;它的任務是將輸入的源代碼&#xff08;字符流&#xff09;分解成稱為“標記”的序列&#xff0c;其中每個標記對應于源代碼中的一個單詞或符號。 以下是一個簡單的C語言詞法…