package test06;
public class Demo15_多线程的安全问题 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Consumer c = new Consumer();
Thread t1 = new Thread(c);
Thread t2 = new Thread(c);
t1.start();
t2.start();
/*
* 运行发现有错误情况出现
*
* 说明多线程的随机性早成了安全问题发生
* 哪的问题呢?
* 1.既然是多线程的问题,必须问题发生在线程任务内
* 2.任务代码是否有共享数据
* 3.是否有对sum进行多次运算呢? 有的
* sum = sum + num ;
System.out.println("sum="+sum);
加同步代码块
*/
}
}
//描述银行动作
class bank
{
private int sum;//公共数据
private Object obj = new Object();
public void add(int num)
{
synchronized(obj)
{
sum = sum + num ;
System.out.println("sum="+sum);//每存一次,看金额变化
}
}
}
class Consumer implements Runnable
{
private bank b = new bank();
@Override
public void run() {
// TODO Auto-generated method stub
for(int x=0 ; x < 3 ; x++)
{
b.add(100);//一次村100,循环3次
}
}
}