/*
java对于多线程的安全问题提供了专业的解决方式:
1、同步代码块:
synchronized(对象)
{
需要被同步的代码
}
2、同步函数。
需求:银行有一个金库,有两个储户分别存300元,每次存100,存3次。
目的:该程序是否有安全问题,如果有,如何解决?
如何找问题:
1,明确哪些代码是多线程运行代码。
2,明确共享数据。
3,明确多线程运行代码中哪些语句是操作共享数据的。
*/
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){}//用于测试多线程的安全性,让他睡10ms。
System.out.println(Thread.currentThread().getName()+"...sum="+sum);
//}
}
}
class Customer implements Runnable
{
private Bank b = new Bank();
public void run()
{
for(int x=0;x<3;x++)
b.add(100);
}
}
class BankThreadSafe
{
public static void main(String[] args)
{
Customer cus = new Customer();
Thread t1 = new Thread(cus);
Thread t2 = new Thread(cus);
t1.start();
t2.start();
}
}