Java的線程是映射到操作系統原生線程之上的,如果要阻塞或喚醒一個線程就需要操作系統介入,需要在用戶態和核心態之間切換,這種切換會消耗大量的系統資源,因爲用戶態與內存態都有各自專用的內存空間,專用的寄存器等,用戶態切換至內核態需要傳遞給許多變量、參數給內核,內核也需要保護好用戶態在切換時的一些寄存器值,變量等,以便內核態調用結束後切換會用戶態繼續工作。
1.如果高頻進行線程的切換操作,將消耗許多CPU的處理時間
2.如果對那些需要同步的簡單的代碼塊,獲取鎖掛起操作消耗的時間比用戶代碼執行的時間還要長,這種同步策略顯然是糟糕的。
synchronized會導致爭不到鎖的線程進入阻塞狀態,所以它是重量級鎖。
Java線程阻塞的代價
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
C語言實現的json解析程序
lindorx
2020-07-08 10:35:53
Pytorch垃圾分類搭建CNN模型中遇到的坑
wxfu2010
2020-07-08 09:59:08
項目中權限分配使用到的位運算
JAVAWeb小将
2020-07-08 09:13:30
Maven相關問題彙總
maven中的${project.groupId} 和 ${project.version} 表示當前項目的groupId和版本。
JAVAWeb小将
2020-07-08 09:13:30
ElasticSearch使用教程四(ElasticSearch查詢詳解)
ilifee
2020-07-08 04:10:56
143. Reorder List學習
ilifee
2020-07-08 04:10:45
SpringBoot項目部署到linux服務器
科比333
2020-07-08 02:35:43
SpringCloud Stream 整合 RabbitMQ-消費失敗後重試
科比333
2020-07-08 02:35:43
Nacos(三)-Nacos Spring Cloud-配置中心
科比333
2020-07-08 02:35:43
SpringCloud Stream 整合RabbitMQ
科比333
2020-07-08 02:35:43
Nacos(二)-Nacos Spring Cloud-註冊中心
科比333
2020-07-08 02:35:43
SpringBoot項目部署到linux服務器之環境搭建
科比333
2020-07-08 02:35:43