奶头挺立呻吟高潮av全片,成人试看120秒体验区,性欧美极品v,A片高潮抽搐揉捏奶头视频

java語言

java并發編程參考

時間:2024-10-30 06:06:54 java語言 我要投稿
  • 相關推薦

java并發編程參考

  在Java5.0之前,只有synchronized(內置鎖)和volatile. Java5.0后引入了顯示鎖ReentrantLock.

  ReentrantLock概況

  ReentrantLock是可重入的鎖,它不同于內置鎖, 它在每次使用都需要顯示的加鎖和解鎖, 而且提供了更高級的特性:公平鎖, 定時鎖, 有條件鎖, 可輪詢鎖, 可中斷鎖. 可以有效避免死鎖的活躍性問題.ReentrantLock實現了

  Lock接口:

  復制代碼 代碼如下:

  public interface Lock {

  //阻塞直到獲得鎖或者中斷

  void lock();

  //阻塞直到獲得鎖或者中斷拋異常

  void lockInterruptibly() throws InterruptedException;

  //只有鎖可用時才獲得,否則直接返回

  boolean tryLock();

  //只有鎖在指定時間內可用時才獲得,否則直接返回,中斷時拋異常

  boolean tryLock(long time, TimeUnit unit) throws InterruptedException;

  void unlock();

  //返回一個綁定在這個鎖上的條件

  Condition newCondition();

  }

  Lock使用

  復制代碼 代碼如下:

  Lock lock = new ReentrantLock();

  lock.lock();

  try{

  //更新對象狀態

  }finally{

  //這里注意,一定要有finally代碼塊去解鎖

  //否則容易造成死鎖等活躍性問題

  lock.unlock();

  }

  ReentrantLock特性

  輪詢鎖的和定時鎖

  可輪詢和可定時的鎖請求是通過tryLock()方法實現的,和無條件獲取鎖不一樣. ReentrantLock可以有靈活的容錯機制.死鎖的很多情況是由于順序鎖引起的, 不同線程在試圖獲得鎖的時候阻塞,并且不釋放自己已經持有的鎖, 最后造成死鎖. tryLock()方法在試圖獲得鎖的時候,如果該鎖已經被其它線程持有,則按照設置方式立刻返回,而不是一直阻塞等下去,同時在返回后釋放自己持有的鎖.可以根據返回的結果進行重試或者取消,進而避免死鎖的發生.

  公平性

  ReentrantLock構造函數中提供公平性鎖和非公平鎖(默認)兩種選擇。所謂公平鎖,線程將按照他們發出請求的順序來獲取鎖,不允許插隊;但在非公平鎖上,則允許插隊:當一個線程發生獲取鎖的請求的時刻,如果這個鎖是可用的,那這個線程將跳過所在隊列里等待線程并獲得鎖。我們一般希望所有鎖是非公平的。因為當執行加鎖操作時,公平性將講由于線程掛起和恢復線程時開銷而極大的降低性能。考慮這么一種情況:A線程持有鎖,B線程請求這個鎖,因此B線程被掛起;A線程釋放這個鎖時,B線程將被喚醒,因此再次嘗試獲取鎖;與此同時,C線程也請求獲取這個鎖,那么C線程很可能在B線程被完全喚醒之前獲得、使用以及釋放這個鎖。這是種雙贏的局面,B獲取鎖的時刻(B被喚醒后才能獲取鎖)并沒有推遲,C更早地獲取了鎖,并且吞吐量也獲得了提高。在大多數情況下,非公平鎖的性能要高于公平鎖的性能。

  可中斷獲鎖獲取操作

  lockInterruptibly方法能夠在獲取鎖的同時保持對中斷的響應,因此無需創建其它類型的不可中斷阻塞操作。

  讀寫鎖ReadWriteLock

  ReentrantLock是一種標準的互斥鎖,每次最多只有一個線程能持有鎖。讀寫鎖不一樣,暴露了兩個Lock對象,其中一個用于讀操作,而另外一個用于寫操作。

  復制代碼 代碼如下:

  public interface ReadWriteLock {

  /**

  * Returns the lock used for reading.

  *

  * @return the lock used for reading.

  */

  Lock readLock();

  /**

  * Returns the lock used for writing.

  *

  * @return the lock used for writing.

  */

  Lock writeLock();

  }

  可選擇實現:

  1.釋放優先

  2.讀線程插隊

  3.重入性

  4.降級

  5.升級

  ReentrantReadWriteLock實現了ReadWriteLock接口,構造器提供了公平鎖和非公平鎖兩種創建方式。讀寫鎖適用于讀多寫少的情況,可以實現更好的并發性。

  示例

  復制代碼 代碼如下:

  public class ReadWriteMap{

  private Mapmap;

  private final ReadWriteLock lock = new ReentrantReadWriteLock();

  private final Lock readLock = lock.readLock();

  private final Lock writeLock = lock.writeLock();

  public ReadWriteMap(Mapmap) {

  this.map = map;

  }

  public V get(K key) {

  readLock.lock();

  try {

  return map.get(key);

  } finally {

  readLock.unlock();

  }

  }

  public void put(K key, V value) {

  writeLock.lock();

  try {

  map.put(key, value);

  } finally {

  writeLock.unlock();

  }

  }

  }

【java并發編程參考】相關文章:

Java并發編程:深入剖析ThreadLocal09-20

java教程之Java編程基礎09-12

Java語言的編程特點03-18

Java編程學習示例07-31

Java編程語言應用的行業05-28

java面向對象編程講解06-18

Java編程中異常處理的方法10-02

Java編程常見問題匯總06-12

Java編程節省內存的方法07-03

Java編程中獲取路徑的方法09-06

主站蜘蛛池模板: 景德镇市| 邢台市| 台湾省| 开平市| 太和县| 吴川市| 安新县| 新田县| 大埔区| 科技| 行唐县| 满洲里市| 江都市| 寻乌县| 抚顺县| 葫芦岛市| 西林县| 蒙山县| 双峰县| 焦作市| 莒南县| 庆元县| 锡林浩特市| 正定县| 营山县| 榕江县| 上蔡县| 奈曼旗| 称多县| 湄潭县| 大冶市| 秦皇岛市| 雷州市| 霸州市| 东乡族自治县| 留坝县| 土默特左旗| 台前县| 常熟市| 武山县| 广宁县|