synchronized的理解
用法解釋
synchronized是Java中的關鍵字,是一種同步鎖。它修飾的對象有以下幾種:?
1. 修飾一個代碼塊,被修飾的代碼塊稱為同步語句塊,其作用的范圍是大括號{}括起來的代碼,作用的對象是調用這個代碼塊的對象;?
2. 修飾一個方法,被修飾的方法稱為同步方法,其作用的范圍是整個方法,作用的對象是調用這個方法的對象;?
3. 修飾一個靜態的方法,其作用的范圍是整個靜態方法,作用的對象是這個類的所有對象;?
4. 修飾一個類(Person.class),其作用的范圍是synchronized后面括號括起來的部分,作用的對象是這個類的所有對象。
原因解釋
java的對象鎖和類鎖:java的對象鎖和類鎖在鎖的概念上基本上和內置鎖是一致的,但是,兩個鎖實際是有很大的區別的,對象鎖是用于對象實例方法,或者一個對象實例上的,類鎖是用于類的靜態方法或者一個類的class對象上的。我們知道,類的對象實例可以有很多個,但是每個類只有一個class對象,所以不同對象實例的對象鎖是互不干擾的,但是每個類只有一個類鎖。
對象的內置鎖和對象的狀態之間是沒有內在的關聯的,雖然大多數類都將內置鎖用做一種有效的加鎖機制,但對象的域并不一定通過內置鎖來保護。當獲取到與對象關聯的內置鎖時,并不能阻止其他線程訪問該對象,當某個線程獲得對象的鎖之后,只能阻止其他線程獲得同一個鎖。之所以每個對象都有一個內置鎖,是為了免去顯式地創建鎖對象。所以synchronized只是一個內置鎖的加鎖機制,當某個方法加上synchronized關鍵字后,就表明要獲得該內置鎖才能執行,并不能阻止其他線程訪問不需要獲得該內置鎖的方法。
轉載于:https://www.cnblogs.com/wade-luffy/p/5671516.html
總結
以上是生活随笔為你收集整理的synchronized的理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java继承与初始化
- 下一篇: sql 给数据库表 字段 添加注释