• java多线程安全问题-同步修饰符于函数


    上一篇文章通过卖票使用同步代码块的方法解决安全问题
    本篇文章首先探讨如何找出这样的安全问题,并提出第二种方式(非静态函数synchronized修饰)解决安全问题

    /*
    
    需求:
       银行有一个公共账号金库
       有两个储户同时对该账户存取,每次存100,共3次
    
    目的:
       该程序是否有安全问题,如果有,如何解决
    
    思路:如何找问题?
     1,明确哪些代码是多线程运行代码
     2,明确共享数据
     3,明确多线程运行代码中哪些语句是操作共享数据的
    */
    
    
    /*
     该程序中Bank是一个资源(私有属性和公有方法),Runnable接口子类中的自定义run方法对该资源进行操作
    */
    class Bank
    {
        private int sum;
        //Object obj = new Object();
        public synchronized void add(int n)
        {
            //synchronized(obj)
            //{
                sum = sum + n;
                try{Thread.sleep(10);}catch(Exception e){}
                System.out.println("sum="+sum);
            //}
        }
    }
    
    class Cus implements Runnable
    {
        private Bank b= new Bank();
        public void run()
        {            
            for(int x=0; x<3; x++)
            {
                b.add(100);
            }
        }
    }
    class BandDemo 
    {
        public static void main(String[] args) 
        {
            Cus c =new Cus();
            Thread t1= new Thread(c);
            Thread t2= new Thread(c);
            t1.start();
            t2.start();
            System.out.println("Hello World!");
        }
    }

    效果:

    Hello World!
    sum=100
    sum=200
    sum=300
    sum=400
    sum=500
    sum=600

  • 相关阅读:
    SqlLiteHelper:基于C#的SqlLite数据库访问基类
    SQL注入专题整理帖
    SQLite数据库查询优化
    php mysql与mysqli 区别
    PHPCMS V9模板制作常用变量表
    实用正则手机和邮箱
    windows2003+iis6.0+php(fastcgi)5.3+wincache+memcached
    ajax 写法
    php防注入,表单提交值转义
    IE6下的两个兼容问题调试
  • 原文地址:https://www.cnblogs.com/shuqingstudy/p/4947728.html
Copyright © 2020-2023  润新知