国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java 程序中的多線程(三)

2019-11-18 10:47:40
字體:
來源:轉載
供稿:網友

  作者: Neel V. Kumar
  synchronized 要害字
  到目前為止,我們看到的示例都只是以非常簡單的方式來利用線程。只有最小的數據流,而且不會出現兩個線程訪問同一個對象的情況。但是,在大多數有用的程序中,線程之間通常有信息流。試考慮一個金融應用程序,它有一個 Account 對象,如下例中所示:
  一個銀行中的多項活動
  public class Account {
  String holderName;
  float amount;
  public Account(String name, float amt) {
  holderName = name;
  amount = amt;
  }
  public void deposit(float amt) {
  amount += amt;
  }
  public void withdraw(float amt) {
  amount -= amt;
  }
  public float checkBalance() {
  return amount;
  }
  }
  在此代碼樣例中潛伏著一個錯誤。假如此類用于單線程應用程序,不會有任何問題。但是,在多線程應用程序的情況中,不同的線程就有可能同時訪問同一個 Account 對象,比如說一個聯合帳戶的所有者在不同的 ATM 上同時進行訪問。在這種情況下,存入和支出就可能以這樣的方式發生:一個事務被另一個事務覆蓋。這種情況將是災難性的。但是,java 編程語言提供了一種簡單的機制來防止發生這種覆蓋。每個對象在運行時都有一個關聯的鎖。這個鎖可通過為方法添加要害字   synchronized 來獲得。這樣,修訂過的 Account 對象(如下所示)將不會遭受像數據損壞這樣的錯誤:
  對一個銀行中的多項活動進行同步處理
  public class Account {
  String holderName;
  float amount;
  public Account(String name, float amt) {
  holderName = name;
  amount = amt;
  }
  public synchronized void deposit(float amt) {
  amount += amt;
  }
  public synchronized void withdraw(float amt) {
  amount -= amt;
  }
  public float checkBalance() {
  return amount;
  }
  }
  deposit() 和 withdraw() 函數都需要這個鎖來進行操作,所以當一個函數運行時,另一個函數就被阻塞。請注重,checkBalance() 未作更改,它嚴格是一個讀函數。因為 checkBalance() 未作同步處理,所以任何其他方法都不會阻塞它,它也不會阻塞任何其他方法,不管那些方法是否進行了同步處理。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 青冈县| 资源县| 阿尔山市| 松阳县| 万安县| 云梦县| 兴义市| 岳阳县| 黎平县| 平顶山市| 瑞金市| 岳普湖县| 浦城县| 陈巴尔虎旗| 遂昌县| 西安市| 长顺县| 米泉市| 平乐县| 青铜峡市| 山东省| 陕西省| 西宁市| 富源县| 浮梁县| 合水县| 石泉县| 砚山县| 图片| 准格尔旗| 江安县| 双柏县| 尉犁县| 长泰县| 泸溪县| 泾川县| 密云县| 黄骅市| 青铜峡市| 呼和浩特市| 三穗县|