Synchronized 詳解(一)

在C程序代碼中我們可以利用操作系統提供的互斥鎖來實現同步塊的互斥訪問及線程的阻塞及喚醒等工作。在Java中除了提供Lock API外還在語法層面上提供了synchronized關鍵字來實現互斥同步原語,本文將對synchronized關鍵字詳細分析。?

帶著問題去理解Synchronized

提示

  • 請帶著這些問題繼續后文,會很大程度上幫助你更好的理解synchronized。
  • Synchronized可以作用在哪里?分別通過對象鎖和類鎖進行舉例。
  • Synchronized本質上是通過什么保證線程安全的?分三個方面回答:加鎖和釋放鎖的原理,可重入原理,保證可見性原理。
  • Synchronized由什么樣的缺陷?Java Lock是怎么彌補這些缺陷的,
  • Synchronized和Lock的對比,和選擇?
  • Synchronized在使用時有何注意事項?
  • Synchronized修飾的方法在拋出異常時,會釋放鎖嗎?.
  • 多個線程等待同一個Synchronized鎖的時候,JM如何選擇下一個獲取鎖的線程?
  • Synchronized使得同時只有一個線程可以執行,性能比較差,有什么提升的方法?
  • 我想更加靈活的控制鎖的釋放和獲取(現在釋放鎖和獲取鎖的時機都被規定死了),怎么辦?
  • 什么是鎖的升級和降級?什么是IM里的偏斜鎖、輕量級鎖、重量級鎖?
  • 不同的JDK中對Synchronized有何優化?

Synchronized的使用

在應用Sychronized關鍵字時需要把握如下注意點:

  • 把鎖只能同時被一個線程獲取,沒有獲得鎖的線程只能等待;
  • 每個實例都對應有自己的一把鎖(this),不同實例之間互不影響;例外:鎖對象是*.class以及synchronized修飾的是static方法的時候,所有對象公用同一把鎖
  • synchronized修飾的方法,無論方法正常執行完畢還是拋出異常,都會釋放鎖

對象鎖

包括方法鎖(默認鎖對象為this,當前實例對象)和同步代碼塊鎖(自己指定鎖對象)


代碼塊形式:手動指定鎖定對象,也可是是this,也可以是自定義的鎖
  • 示例1?

  • ?示例2

?

?

方法鎖形式:synchronized修飾普通方法,鎖對象默認為this?

類鎖

指synchronize修飾靜態的方法或指定鎖對象為Class對象


synchronize修飾靜態方法?
  • 示例1

?

  • 示例2?
?synchronized指定鎖對象為Class對象

?

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

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

相關文章

10、BossCms代碼審計

1、任意文件上傳 限制 復現 POST /system/extend/ueditor/php/controller.php?actionuploadfile&encodeutf-8 HTTP/1.1 Host: bosscms.com Content-Length: 761 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome…

為什么要學習三維GIS開發?從技術層面告訴你答案

大家都知道GIS開發屬于GIS行業中就業薪資較高的崗位,并且測繪、遙感以及城規等相關專業的畢業生紛紛轉行做webgis開發。 那么,今天小編從技術層面探討一下,為什么建議大家不要僅僅停留在webgis,而要繼續往前學習三維GIS開發&…

TSINGSEE青犀AI智能分析網關V4智慧油田安全生產監管方案

一、方案背景 隨著科技的不斷發展,視頻監控技術在油田行業中得到了廣泛應用。為了提高油田生產的安全性和效率,建設一套智能視頻監控平臺保障安全生產顯得尤為重要。本方案采用先進的視頻分析技術、物聯網技術、云計算技術、大數據和人工智能技術&#…

Linux設備模型(十) - bus/device/device_driver/class

四,驅動的注冊 1,struct device_driver結構體 /** * struct device_driver - The basic device driver structure * name: Name of the device driver. * bus: The bus which the device of this driver belongs to. * owner: The module own…

JavaWeb Tomcat啟動、部署、配置、集成IDEA

web服務器軟件 服務器是安裝了服務器軟件的計算機,在web服務器軟件中,可以部署web項目,讓用戶通過瀏覽器來訪問這些項目。 Web服務器是一個應用程序(軟件),對HTTP協議的操作進行封裝,使得程序…

MATLAB讀取txt文本數據及可視化指南

MATLAB讀取txt文本數據的說明指南 目錄 MATLAB讀取txt文本數據的說明指南摘要1. 數據準備2. 讀取數據3. 繪制圖形4. 小結 摘要 在MATLAB中,讀取txt文本格式文件數據是一項基本的操作,特別是在數據分析和可視化方面。本文將介紹如何使用MATLAB讀取txt文本…

C++ 基礎知識

一. 預備知識 1. C的編程方式 過程性語言 (結構化、自頂向下)、面向對象語言、泛型編程 (創建獨立于類型的代碼) 2. 創建源代碼文件的技巧 擴展名:.cpp 二. 第一個程序 - HelloWorld main() 入口點 返回 int 標準庫 iostream std: 標準庫的縮寫 Statement…

HarmonyOS-使用call事件拉起指定UIAbility到后臺

使用call事件拉起指定UIAbility到后臺 許多應用希望借助卡片的能力,實現和應用在前臺時相同的功能。例如音樂卡片,卡片上提供播放、暫停等按鈕,點擊不同按鈕將觸發音樂應用的不同功能,進而提高用戶的體驗。在卡片中使用postCardA…

科技的成就(五十七)

535、Machine Learning "1959 年 7 月,塞繆爾首創 Machine Learning 一詞。塞繆爾在“Some Studies in Machine Learning Using theGame of Checkers”一文中給 Machine Learning 下了個非正式定義:沒有明確編程指令的情況下,能讓計算機…

【js中的作用域】

理解 js中的作用我們可以分為三個部分 全局作用域函數作用域塊級作用域 全局作用域 不在任何函數內部或者大括號中聲明的變量,都是再全局作用域下,全局聲明的變量可以在程序中的任何位置訪問 函數作用域 函數作用域也叫局部作用域,如果一個變量聲名在一個函數內部,那么它…

LSTM進行字符級文本生成(pytorch實現)

文章目錄 基于pytorch的LSTM進行字符集文本生成前言一、數據集二、代碼實現 1.到入庫和LSTM進行模型構建2.數據預處理函數3.訓練函數4.預測函數5.文本生成函數6.主函數完整代碼總結 前言 本文介紹了機器學習中深度學習的內容使用pytorch構建LSTM模型進行字符級文本生成任務 一…

王者榮耀整蠱搭建直播新玩法/obs貼紙配置教程

最近很火的王者榮耀整蠱直播,相信很多玩王者的玩家也想開一個直播,但是看到這種直播娛樂效果很有意思也想搭建一個,這里夢哥給大家出了一期搭建的教程! 進階版視頻教程: 這期的教程是進階版新玩法升級,具體…

Vue3:使用 Composition API 不需要 Pinia

在 Vue.js 開發的動態環境中,在單個組件中處理復雜的業務邏輯可能會導致笨重的文件和維護噩夢。雖然 Pinia 提供集中式狀態管理,但僅依賴它來處理復雜的業務邏輯可能會導致代碼混亂。本文探討了使用 Composition API 的替代方法,說明開發人員…

數據庫表 索引

目錄 一、索引的分類 1、按存儲形式: 1)B-TREE索引: 2)位圖索引: 3)反向鍵索引: 4)基于函數的索引: 2、按唯一性: 1)唯一索引: 3、按列的個數…

代碼隨想錄算法訓練營第八天

344. 反轉字符串 方法&#xff1a; 方法一&#xff1a; 直接用reverse函數 注意&#xff1a; 代碼&#xff1a; class Solution { public:void reverseString(vector<char>& s) {return reverse(s.begin(), s.end());} };運行結果&#xff1a; 方法&#xff1…

解釋前端路由的概念,以及單頁應用(SPA)和多頁應用(MPA)的區別

前端路由是現代Web應用中的一種設計模式&#xff0c;它允許用戶在單個網頁應用程序&#xff08;SPA&#xff09;內部通過改變URL而無需重新加載整個頁面來切換不同的視圖或內容。在傳統的多頁應用&#xff08;MPA&#xff09;中&#xff0c;每訪問一個新頁面&#xff0c;瀏覽器…

搜索算法(算法競賽、藍橋杯)--雙向DFS+二分查找

1、B站視頻鏈接&#xff1a;B26 雙向DFS 送禮物_嗶哩嗶哩_bilibili #include <bits/stdc.h> using namespace std; int n,m; int g[46];//存儲所有物品的質量 int w[1<<23];//存儲所有能湊出來的重量 int ans,cnt;//w的個數是cnt//搜索第u個數&#xff0c;和為s; …

Geeker Admin添加若以分離版本的后臺作為后臺

添加驗證碼 下載若依賴前后端分離版本&#xff0c;配置好自己數據庫&#xff0c;redis連接地址 登錄添加驗證碼 配置自己的若依后端連接地址 添加驗證碼請求方法 登錄頁面登錄輸入框添加驗證碼&#xff0c;uuid,調用的驗證碼刷新方法 注意&#xff1a;這里要用響應式定義驗證…

5_怎么看原理圖之協議類接口之NAND Flash筆記

NAND Flash原理圖&#xff1a; 由NAND Flash的原理圖可以看出&#xff0c;做為一個存儲芯片&#xff0c;只有I/O引腳&#xff0c;并沒有地址引腳&#xff0c;怎么傳地址&#xff1f;遵循一定的規范&#xff0c;先通過LDATA把地址傳出去&#xff0c;再傳數據。具體的需要查看芯片…

vue前端數據轉換顯示

<el-table-column label"項目模板名稱" align"center" prop"tempName" width"180" :formatter"templFormat" /> :formatter"templFormat" // 模板名單 optionTempls: [], // datas value templFormat(row,…