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

Java銀行取錢線程安全問(wèn)題實(shí)例分析

 更新時(shí)間:2019年09月17日 11:16:43   作者:cakincqm  
這篇文章主要介紹了Java銀行取錢線程安全問(wèn)題,結(jié)合具體實(shí)例形式分析了java使用線程操作模擬銀行取錢的相關(guān)安全問(wèn)題,需要的朋友可以參考下

本文實(shí)例講述了Java銀行取錢線程安全問(wèn)題。分享給大家供大家參考,具體如下:

一 定義一個(gè)賬戶類

public class Account
{
   // 封裝賬戶編號(hào)、賬戶余額的兩個(gè)成員變量
   private String accountNo;
   private double balance;
   public Account(){}
   // 構(gòu)造器
   public Account(String accountNo , double balance)
   {
      this.accountNo = accountNo;
      this.balance = balance;
   }
   // 此處省略了accountNo和balance的setter和getter方法
   // accountNo的setter和getter方法
   public void setAccountNo(String accountNo)
   {
      this.accountNo = accountNo;
   }
   public String getAccountNo()
   {
      return this.accountNo;
   }
   // balance的setter和getter方法
   public void setBalance(double balance)
   {
      this.balance = balance;
   }
   public double getBalance()
   {
      return this.balance;
   }
   // 下面兩個(gè)方法根據(jù)accountNo來(lái)重寫hashCode()和equals()方法
   public int hashCode()
   {
      return accountNo.hashCode();
   }
   public boolean equals(Object obj)
   {
      if(this == obj)
        return true;
      if (obj !=null
        && obj.getClass() == Account.class)
      {
        Account target = (Account)obj;
        return target.getAccountNo().equals(accountNo);
      }
      return false;
   }
}

二 定義一個(gè)取錢線程

public class DrawThread extends Thread
{
   // 模擬用戶賬戶
   private Account account;
   // 當(dāng)前取錢線程所希望取的錢數(shù)
   private double drawAmount;
   public DrawThread(String name , Account account
      , double drawAmount)
   {
      super(name);
      this.account = account;
      this.drawAmount = drawAmount;
   }
   // 當(dāng)多條線程修改同一個(gè)共享數(shù)據(jù)時(shí),將涉及數(shù)據(jù)安全問(wèn)題。
   public void run()
   {
      // 賬戶余額大于取錢數(shù)目
      if (account.getBalance() >= drawAmount)
      {
        // 吐出鈔票
        System.out.println(getName()
           + "取錢成功!吐出鈔票:" + drawAmount);
        try
        {
           Thread.sleep(1);
        }
        catch (InterruptedException ex)
        {
           ex.printStackTrace();
        }
        // 修改余額
        account.setBalance(account.getBalance() - drawAmount);
        System.out.println("\t余額為: " + account.getBalance());
      }
      else
      {
        System.out.println(getName() + "取錢失敗!余額不足!");
      }
   }
}

三 測(cè)試主類

public class DrawTest
{
   public static void main(String[] args)
   {
      // 創(chuàng)建一個(gè)賬戶
      Account acct = new Account("1234567" , 1000);
      // 模擬兩個(gè)線程對(duì)同一個(gè)賬戶取錢
      new DrawThread("甲" , acct , 800).start();
      new DrawThread("乙" , acct , 800).start();
   }
}

四 運(yùn)行

乙取錢成功!吐出鈔票:800.0
甲取錢成功!吐出鈔票:800.0
     余額為: 200.0
     余額為: -600.0

五 說(shuō)明

賬戶余額只有1000時(shí)取出1600,而且賬戶余額出現(xiàn)了負(fù)數(shù),這部是銀行希望看到的結(jié)果。

雖然上面程序是人為地使用Thread.sleep(1)來(lái)強(qiáng)制線程調(diào)度切換,但這種切換是完全可能發(fā)生的。

更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java進(jìn)程與線程操作技巧總結(jié)》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Java 如何使用@Autowired注解自動(dòng)注入bean

    Java 如何使用@Autowired注解自動(dòng)注入bean

    這篇文章主要介紹了Java 使用@Autowired注解自動(dòng)注入bean的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 使用IDEA進(jìn)行安卓開發(fā)的詳細(xì)圖文教程

    使用IDEA進(jìn)行安卓開發(fā)的詳細(xì)圖文教程

    安卓開發(fā)本身就是Java開發(fā)的一個(gè)分支,我們要確保計(jì)算機(jī)已經(jīng)安裝好JDK并做好了相關(guān)的配置,下面這篇文章主要給大家介紹了關(guān)于如何使用IDEA進(jìn)行安卓開發(fā)的詳細(xì)圖文教程,需要的朋友可以參考下
    2023-04-04
  • Java使用RandomAccessFile類對(duì)文件進(jìn)行讀寫

    Java使用RandomAccessFile類對(duì)文件進(jìn)行讀寫

    本篇文章主要介紹了Java使用RandomAccessFile類對(duì)文件進(jìn)行讀寫,詳細(xì)的介紹了RandomAccessFile類的使用技巧和實(shí)例應(yīng)用,有興趣的可以了解一下
    2017-04-04
  • Idea代理設(shè)置與Java程序的代理設(shè)置方式

    Idea代理設(shè)置與Java程序的代理設(shè)置方式

    文章總結(jié):學(xué)習(xí)WebService時(shí),使用Fiddler抓取包數(shù)據(jù),發(fā)現(xiàn)Idea代理設(shè)置與Java程序代理設(shè)置不同,Java程序需要在發(fā)送請(qǐng)求前設(shè)置代理,代碼如下
    2025-01-01
  • IntelliJ IDEA 報(bào)錯(cuò):找不到包或者找不到符號(hào)的問(wèn)題及解決方案

    IntelliJ IDEA 報(bào)錯(cuò):找不到包或者找不到符號(hào)的問(wèn)題及解決方案

    這篇文章主要介紹了IntelliJ IDEA 報(bào)錯(cuò):找不到包或者找不到符號(hào)的問(wèn)題及解決方案,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 淺談java String不可變的好處

    淺談java String不可變的好處

    這篇文章主要介紹了java String不可變的好處,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Java連接MySQL8.0 JDBC的詳細(xì)步驟(IDEA版本)

    Java連接MySQL8.0 JDBC的詳細(xì)步驟(IDEA版本)

    這篇文章主要介紹了Java連接MySQL8.0 JDBC的詳細(xì)步驟(IDEA版本),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • java操作ftp下載文件示例

    java操作ftp下載文件示例

    這篇文章主要介紹了java操作ftp下載文件的示例,需要的朋友可以參考下
    2014-02-02
  • Java super和this的對(duì)比及使用

    Java super和this的對(duì)比及使用

    這篇文章主要介紹了Java super和this的對(duì)比及使用的相關(guān)資料,java中this與super會(huì)經(jīng)常在使用的時(shí)候混淆,需要的朋友可以參考下
    2017-08-08
  • SpringBoot結(jié)合Tess4J實(shí)現(xiàn)拍圖識(shí)字的示例代碼

    SpringBoot結(jié)合Tess4J實(shí)現(xiàn)拍圖識(shí)字的示例代碼

    圖片中的文字提取已經(jīng)越來(lái)越多地應(yīng)用于數(shù)據(jù)輸入和自動(dòng)化處理過(guò)程,本文主要介紹了SpringBoot結(jié)合Tess4J實(shí)現(xiàn)拍圖識(shí)字的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06

最新評(píng)論

双江| 鸡东县| 桐城市| 临猗县| 泸定县| 临邑县| 内黄县| 达孜县| 普兰县| 聊城市| 濮阳市| 孙吴县| 太仆寺旗| 营口市| 临西县| 娱乐| 桓仁| 陕西省| 阿图什市| 永济市| 昭平县| 许昌市| 门源| 泾源县| 通城县| 夏津县| 措美县| 宝清县| 垫江县| 浙江省| 宜宾县| 崇文区| 洛宁县| 剑川县| 电白县| 宜州市| 古浪县| 七台河市| 永登县| 玉树县| 闵行区|