java多线程安全问题-同步修饰符于函数
2015-11-08 17:53
387 查看
上一篇文章通过卖票使用同步代码块的方法解决安全问题
本篇文章首先探讨如何找出这样的安全问题,并提出第二种方式(非静态函数synchronized修饰)解决安全问题
效果:
Hello World!
sum=100
sum=200
sum=300
sum=400
sum=500
sum=600
本篇文章首先探讨如何找出这样的安全问题,并提出第二种方式(非静态函数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
相关文章推荐
- Java内存回收机制(第三讲)
- java 多线程安全问题-同步代码块
- Spring中的报错:no matching editors or conversion strategy found
- 华为、阿里、京东使用的Java web框架是啥样的?
- json、javaBean、xml互转的几种工具介绍
- Spring MVC 框架搭建及详解
- spring配置数据源
- eff java 15条
- 进程和线程的关系,同时如何使用Java实现
- Caused by: java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
- Jaxb2 实现JavaBean与xml互转
- Spring横切面(advice),增强(advisor),切入点(PointCut)
- Java基础3笔记
- Struts2和Spring的mvc的区别
- myeclipse使用工具简化数据库开发
- java生成指定范围的随机数
- MyEclipse10中安装activiti插件后,新建activiti项目未显示maven dependencies
- Java中关键字
- 高效敏感词过滤JAVA实现(DFA算法)
- struts2返回json数据配置