您的位置:首页 > 编程语言 > Java开发

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

2015-11-08 17:53 387 查看
上一篇文章通过卖票使用同步代码块的方法解决安全问题
本篇文章首先探讨如何找出这样的安全问题,并提出第二种方式(非静态函数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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: