麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Java > 正文

深入Synchronized和java.util.concurrent.locks.Lock的區別詳解

2019-11-26 16:04:17
字體:
來源:轉載
供稿:網友
主要相同點:Lock能完成Synchronized所實現的所有功能。
主要不同點:Lock有比Synchronized更精確的線程予以和更好的性能。
Synchronized會自動釋放鎖,但是Lock一定要求程序員手工釋放,并且必須在finally從句中釋放。
synchronized 修飾方法時 表示同一個對象在不同的線程中 表現為同步隊列
如果實例化不同的對象 那么synchronized就不會出現同步效果了。
1.對象的鎖
所有對象都自動含有單一的鎖。
JVM負責跟蹤對象被加鎖的次數。如果一個對象被解鎖,其計數變為0。在任務(線程)第一次給對象加鎖的時候,計數變為1。每當這個相同的任務(線程)在此對象上獲得鎖時,計數會遞增。
只有首先獲得鎖的任務(線程)才能繼續獲取該對象上的多個鎖。
每當任務離開一個synchronized方法,計數遞減,當計數為0的時候,鎖被完全釋放,此時別的任務就可以使用此資源。
2.synchronized同步塊
2.1同步到單一對象鎖
當使用同步塊時,如果方法下的同步塊都同步到一個對象上的鎖,則所有的任務(線程)只能互斥的進入這些同步塊。
Resource1.java演示了三個線程(包括main線程)試圖進入某個類的三個不同的方法的同步塊中,雖然這些同步塊處在不同的方法中,但由于是同步到同一個對象(當前對象 synchronized (this)),所以對它們的方法依然是互斥的。
比如
復制代碼 代碼如下:

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

如果在線程1中
復制代碼 代碼如下:

Test test=new Test();
User u=new User();
u.setUserName(“liaomin”);
u.setUserPassword(“liaomin”);
Test.add(u);

如果在線程2中
復制代碼 代碼如下:

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

那么 現在線程1 和線程2同時啟動 如果對象new的不是同一個Test
那么出現線程交叉的話 那么插入數據庫中的數據就是相同的
因為你的user變量時靜態的   你給他賦值第一次 假如還沒有save的時候
另外一個線程改變了user的值 那么第一個線程插入時也就是第二次賦予的值了

所以要實現同步 那么可以改方法為靜態的就能達到同步的效果了
修改如下
復制代碼 代碼如下:

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

修改為static的方法是存在于堆中
是全局方法 針對于所有實例化與未 實例化的對象只存在一個 所以會出現同步隊列
當然不用static 也可以 那就用lock
復制代碼 代碼如下:

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多少個對象都會是線程同步的
相當于
復制代碼 代碼如下:

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

同時 lock性能上高于synchronized
只是lock需要手動關閉
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 日韩黄色免费电影 | 一级做人爱c黑人影片 | 中国嫩模一级毛片 | 欧美福利视频一区二区三区 | 午夜精品老牛av一区二区三区 | free japan xxxxhdsex69| 久久久久久久爱 | 蜜桃免费在线 | 一区二区三区无码高清视频 | 久久新地址| 国产美女视频一区二区三区 | 精品国产视频一区二区三区 | 国产精品久久久久久久久久久久久久久 | 久草在线视频首页 | 亚洲成人久久精品 | 日本a在线观看 | 久久久久久久久久亚洲 | 日日摸夜夜骑 | 欧美成人一区二区三区 | 欧美激情在线播放 | 91短视频网址| 日本在线免费观看视频 | 少妇一级淫片免费看 | 黄色免费高清网站 | 中文区中文字幕免费看 | 成人在线视频免费播放 | h久久| 日韩一级片 | 国产精品久久久久久238 | 欧美一级免费看 | 国产在线1区 | av免播放 | 国产在线精品一区二区三区不卡 | 午夜精品久久久久久久99热浪潮 | 综合精品 | 亚洲精品aaaaa | 日韩欧美精品中文字幕 | 国产成人在线网址 | 久草资源在线观看 | 成年免费看 | 国产一区二区免费在线观看视频 |