• 多线程环境下的线程不安全问题(1)


    在不考虑多线程的情况下,很多类代码都是完全正确的,但是如果放在多线程环境下,这些代码就很容易出错,我们称这些类为 线程不安全类 。多线程环境下使用线程安全类 才是安全的。

    下面是一个线程不安全类的例子:

    public class Account {
         private Integer balance;

         public Account(Integer balance) {
               super();
               this. balance = balance;
         }

         public Integer getBalance() {
               return balance;
         }

         public void setBalance(Integer balance) {
               this. balance = balance;
         }
         
         public void draw(Integer drawAccount){
               if( balance>= drawAccount){
                   System. out.println(Thread. currentThread().getName()+"取钱成功,吐出钞票:" +drawAccount );
                   balance-= drawAccount;
                  System. out.println( "余额为:"+balance );
              } else{
                  System. out.println( Thread. currentThread().getName()+"余额不足,取钱失败!" );
              }
         }
    }



    public class DrawThread extends Thread{
         private Account account;
         private Integer drawAccount;
         public DrawThread(String name,Account account, Integer drawAccount) {
               super( name);
               this. account = account;
               this. drawAccount = drawAccount;
         }
         //当多条线程共享一个数据的时候,会涉及到线程安全问题
         public void run(){
               account.draw( drawAccount);
         }
    }

    public class Main{
         public static void main(String[] args) {
              Account account = new Account(1000);
               //模拟两条线程对于同一个账户取钱
               new DrawThread( "甲", account, 800).start();;
               new DrawThread( "乙", account, 800).start();;
         }
    }

    运行结果:

    很明显线程同步时发生了问题,线程不安全。

    那么如何解决呢?下一节讲。






  • 相关阅读:
    VBA中的ColorIndex信息
    登录测试页面
    HttpHandler HttpModule入门篇
    vs 2005的条件断点(调试多线程必会)
    VBA中操作Excel的部分方法代码示例
    c# 线程同步: 详解lock,monitor,同步事件和等待句柄以及mutex
    一个对Entity Framework数据层的封装
    中华人民共和国 第二代身份证 号码规则
    什么是.NET应用程序域
    VBA编程常用语句(转载)
  • 原文地址:https://www.cnblogs.com/ZhangJinkun/p/4531692.html
Copyright © 2020-2023  润新知