标签:
上一篇文章通过卖票使用同步代码块的方法解决安全问题
本篇文章首先探讨如何找出这样的安全问题,并提出第二种方式(非静态函数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
标签:
原文地址:http://www.cnblogs.com/shuqingstudy/p/4947728.html