码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-11-08 19:07:17      阅读:273      评论:0      收藏:0      [点我收藏+]

标签:

上一篇文章通过卖票使用同步代码块的方法解决安全问题
本篇文章首先探讨如何找出这样的安全问题,并提出第二种方式(非静态函数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多线程安全问题-同步修饰符于函数

标签:

原文地址:http://www.cnblogs.com/shuqingstudy/p/4947728.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!