Java線程阻塞的代價

Java的線程是映射到操作系統原生線程之上的,如果要阻塞或喚醒一個線程就需要操作系統介入,需要在用戶態和核心態之間切換,這種切換會消耗大量的系統資源,因爲用戶態與內存態都有各自專用的內存空間,專用的寄存器等,用戶態切換至內核態需要傳遞給許多變量、參數給內核,內核也需要保護好用戶態在切換時的一些寄存器值,變量等,以便內核態調用結束後切換會用戶態繼續工作。
1.如果高頻進行線程的切換操作,將消耗許多CPU的處理時間
2.如果對那些需要同步的簡單的代碼塊,獲取鎖掛起操作消耗的時間比用戶代碼執行的時間還要長,這種同步策略顯然是糟糕的。
synchronized會導致爭不到鎖的線程進入阻塞狀態,所以它是重量級鎖。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章