黑马程序员技术交流社区
标题:
同步函数this疑惑
[打印本页]
作者:
王璐
时间:
2012-7-10 19:14
标题:
同步函数this疑惑
本帖最后由 王璐 于 2012-7-10 19:42 编辑
/*
需求:
银行有一个金库。
有两个储户分别存300员,每次存100,存3次。
目的:该程序是否有安全问题,如果有,如何解决?
如何找问题:
1,明确哪些代码是多线程运行代码。
2,明确共享数据。
3,明确多线程运行代码中哪些语句是操作共享数据的。
*/
class Bank
{
private int sum;
public synchronized void add(int n)
{
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 BankDemo
{
public static void main(String[] args)
{
Cus c = new Cus();
Thread t1 = new Thread(c);
Thread t2 = new Thread(c);
t1.start();
t2.start();
}
}
复制代码
看迷糊了都,解决了
作者:
徐然
时间:
2012-7-10 19:47
本帖最后由 徐然 于 2012-7-10 19:49 编辑
这里的this不指向c,也不指向t1,t2;
首先需要同步的方法是add();
那么t1,t2只是开启线程,运行run()
而run方法是封装在c内的,但是c并没有直接调用add方法,
而是在内部创建了b,让b调用了add方法,那么最终,使用的this锁就是b
个人理解,不知道对不对..
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2