最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入Synchronized和java.util.concurrent.locks.Lock的區(qū)別詳解

 更新時(shí)間:2013年06月04日 15:27:40   作者:  
本篇文章是對Synchronized和java.util.concurrent.locks.Lock的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
主要相同點(diǎn):Lock能完成Synchronized所實(shí)現(xiàn)的所有功能。
主要不同點(diǎn):Lock有比Synchronized更精確的線程予以和更好的性能。
Synchronized會自動釋放鎖,但是Lock一定要求程序員手工釋放,并且必須在finally從句中釋放。
synchronized 修飾方法時(shí) 表示同一個(gè)對象在不同的線程中 表現(xiàn)為同步隊(duì)列
如果實(shí)例化不同的對象 那么synchronized就不會出現(xiàn)同步效果了。
1.對象的鎖
所有對象都自動含有單一的鎖。
JVM負(fù)責(zé)跟蹤對象被加鎖的次數(shù)。如果一個(gè)對象被解鎖,其計(jì)數(shù)變?yōu)?。在任務(wù)(線程)第一次給對象加鎖的時(shí)候,計(jì)數(shù)變?yōu)?。每當(dāng)這個(gè)相同的任務(wù)(線程)在此對象上獲得鎖時(shí),計(jì)數(shù)會遞增。
只有首先獲得鎖的任務(wù)(線程)才能繼續(xù)獲取該對象上的多個(gè)鎖。
每當(dāng)任務(wù)離開一個(gè)synchronized方法,計(jì)數(shù)遞減,當(dāng)計(jì)數(shù)為0的時(shí)候,鎖被完全釋放,此時(shí)別的任務(wù)就可以使用此資源。
2.synchronized同步塊
2.1同步到單一對象鎖
當(dāng)使用同步塊時(shí),如果方法下的同步塊都同步到一個(gè)對象上的鎖,則所有的任務(wù)(線程)只能互斥的進(jìn)入這些同步塊。
Resource1.java演示了三個(gè)線程(包括main線程)試圖進(jìn)入某個(gè)類的三個(gè)不同的方法的同步塊中,雖然這些同步塊處在不同的方法中,但由于是同步到同一個(gè)對象(當(dāng)前對象 synchronized (this)),所以對它們的方法依然是互斥的。
比如
復(fù)制代碼 代碼如下:

Class Test
{
    public static User user=null;
      Public synchronized void add(User u)
{
     user=u;
     Dao.save(user)
}
}

如果在線程1中
復(fù)制代碼 代碼如下:

Test test=new Test();
User u=new User();
u.setUserName(“l(fā)iaomin”);
u.setUserPassword(“l(fā)iaomin”);
Test.add(u);

如果在線程2中
復(fù)制代碼 代碼如下:

Test tes1t=new Test();
User u1=new User();
u1.setUserName(“huqun”);
u1.setUserPassword(“huqun”);
Tes1t.add(u1);

那么 現(xiàn)在線程1 和線程2同時(shí)啟動 如果對象new的不是同一個(gè)Test
那么出現(xiàn)線程交叉的話 那么插入數(shù)據(jù)庫中的數(shù)據(jù)就是相同的
因?yàn)槟愕膗ser變量時(shí)靜態(tài)的   你給他賦值第一次 假如還沒有save的時(shí)候
另外一個(gè)線程改變了user的值 那么第一個(gè)線程插入時(shí)也就是第二次賦予的值了

所以要實(shí)現(xiàn)同步 那么可以改方法為靜態(tài)的就能達(dá)到同步的效果了
修改如下
復(fù)制代碼 代碼如下:

Public static synchronized void add(User u)
{
     user=u;
     Dao.save(user)
}

修改為static的方法是存在于堆中
是全局方法 針對于所有實(shí)例化與未 實(shí)例化的對象只存在一個(gè) 所以會出現(xiàn)同步隊(duì)列
當(dāng)然不用static 也可以 那就用lock
復(fù)制代碼 代碼如下:

Class Test
{
public static User user=null;
Lock lock=new ReentrantLock();

      Public void add(User u)
{
lock.lock();
     user=u;
     Dao.save(user);
lock.unlock();
}
}

這樣無論你new多少個(gè)對象都會是線程同步的
相當(dāng)于
復(fù)制代碼 代碼如下:

Public static synchronized void add(User u)
{
     user=u;
     Dao.save(user)
}

同時(shí) lock性能上高于synchronized
只是lock需要手動關(guān)閉

相關(guān)文章

  • Java中的CopyOnWriteArrayList深入解讀

    Java中的CopyOnWriteArrayList深入解讀

    這篇文章主要介紹了Java中的CopyOnWriteArrayList深入解讀,在 ArrayList 的類注釋上,JDK 就提醒了我們,如果要把 ArrayList 作為共享變量的話,是線程不安全的,需要的朋友可以參考下
    2023-12-12
  • SpringBoot整合mybatis通用Mapper+自定義通用Mapper方法解析

    SpringBoot整合mybatis通用Mapper+自定義通用Mapper方法解析

    這篇文章主要介紹了SpringBoot整合mybatis通用Mapper+自定義通用Mapper方法,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java實(shí)現(xiàn)上傳文件到服務(wù)器和客戶端

    java實(shí)現(xiàn)上傳文件到服務(wù)器和客戶端

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)上傳文件到服務(wù)器和客戶端,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Java?空和null的區(qū)別

    Java?空和null的區(qū)別

    本文主要介紹了Java?空和null的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • JAXB命名空間及前綴_動力節(jié)點(diǎn)Java學(xué)院整理

    JAXB命名空間及前綴_動力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要給大家介紹了關(guān)于JAXB命名空間及前綴的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • 詳解SpringBoot中如何使用Reactor模型

    詳解SpringBoot中如何使用Reactor模型

    Reactor模型主要提供了一種在Java虛擬機(jī)上構(gòu)建非阻塞應(yīng)用的方式,這種方式使用了響應(yīng)式編程原理,通過響應(yīng)式流標(biāo)準(zhǔn)來實(shí)現(xiàn),下面我們就來看看它在SpringBoot中是如何使用的吧
    2024-04-04
  • java中重載,繼承,重寫和多態(tài)的區(qū)別

    java中重載,繼承,重寫和多態(tài)的區(qū)別

    這篇文章主要介紹了java中重載,繼承,重寫和多態(tài)的區(qū)別,需要的朋友可以參考下
    2014-07-07
  • Java報(bào)NoClassDefFoundError異常的原因及解決

    Java報(bào)NoClassDefFoundError異常的原因及解決

    在 Java 開發(fā)過程中, java.lang.NoClassDefFoundError 是一個(gè)令人頭疼的運(yùn)行時(shí)錯(cuò)誤,本文將深入探討這一問題的原因和常見場景,并提供實(shí)用的解決方法,希望對大家有所幫助
    2025-03-03
  • Mybatis結(jié)果集映射與生命周期詳細(xì)介紹

    Mybatis結(jié)果集映射與生命周期詳細(xì)介紹

    結(jié)果集映射指的是將數(shù)據(jù)表中的字段與實(shí)體類中的屬性關(guān)聯(lián)起來,這樣 MyBatis 就可以根據(jù)查詢到的數(shù)據(jù)來填充實(shí)體對象的屬性,幫助我們完成賦值操作
    2022-10-10
  • Java實(shí)現(xiàn)上傳Excel文件并導(dǎo)入數(shù)據(jù)庫

    Java實(shí)現(xiàn)上傳Excel文件并導(dǎo)入數(shù)據(jù)庫

    這篇文章主要介紹了在java的基礎(chǔ)上學(xué)習(xí)上傳Excel文件并導(dǎo)出到數(shù)據(jù)庫,感興趣的小伙伴不要錯(cuò)過奧
    2021-09-09

最新評論

凤台县| 酉阳| 抚松县| 和林格尔县| 灵寿县| 方正县| 和平区| 南和县| 垣曲县| 旬邑县| 安福县| 甘德县| 雅江县| 五大连池市| 常熟市| 胶南市| 南溪县| 镇雄县| 和硕县| 松滋市| 衡阳市| 来凤县| 临湘市| 美姑县| 自贡市| 綦江县| 黄冈市| 宁陵县| 山阳县| 皋兰县| 郁南县| 旌德县| 杭锦后旗| 凌海市| 长子县| 西盟| 雅江县| 乐平市| 容城县| 宣恩县| 山阴县|