zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    JavaScript 多个空格替换成1个空格
    「DIARY」NOI2021 小结
    kubernetes常用命令总结
    Qt绘图(使用QPainter)翻转图像的两种方法
    android 11 R framework 新特证 开发备忘
    浏览器的缓存机制
    记el-tree 懒加载复选框回显的坑
    VUE根据文件流下载EXC
    西瓜视频播放器VUE
    推荐系统打散算法--权重
  • 原文地址:https://www.cnblogs.com/shuqingstudy/p/4947728.html
Copyright © 2011-2022 走看看