黑马程序员技术交流社区
标题:
关于多线程中的同步函数问题
[打印本页]
作者:
应国炎
时间:
2011-12-17 00:27
标题:
关于多线程中的同步函数问题
本帖最后由 应国炎 于 2011-12-17 00:29 编辑
(我以前有几个问题可能没有说清楚,以后我会尽量说清楚一些的,{:soso_e100:} )
刚看到了多线程同步的章节,就按毕老师写的,自己稍微改了一下实现的是两个储户分帐户存放自己的Money,我把代码
全部
放同步函数jihe()里,和直接
全部
放同步代码快中,跑出来的数据竟然是不一样的,也就是说同步代码快和同步函数实现了不一样的处理,为什么会出现这样的情况呢?
以下是我的代码:
class Bank
{
private int sum;
public void add(int n)
{
sum=sum+n;
System.out.println(Thread.currentThread().getName()+" sum="+sum);
}
}
class Cus implements Runnable
{
public void run()
{
synchronized(new Object())
{
Bank b=new Bank();
for(int x=0;x<10;x++)
{
b.add(100);
}
//jihe(); //把上面的代码全部放在了jihe同步函数中
}
}
/*
public synchronized void jihe()
{
Bank b=new Bank();
for(int x=0;x<10;x++)
{
b.add(100);
}
}*/
}
class Test
{
public static void main(String args[])
{
Cus c=new Cus();
Thread t1=new Thread(c,"储户1");
Thread t2=new Thread(c,"储户2");
t1.start();
t2.start();
}
}
复制代码
作者:
应国炎
时间:
2011-12-17 00:38
本帖最后由 应国炎 于 2011-12-17 00:44 编辑
我找到原因了,原来是synchronized(new Object())这里的问题,
class Cus implements Runnable
{
Object a=new Object(); //需要这样处理后才能实现,原来是针对同一个对象才能实现!
public void run()
{
synchronized(a)
{
Bank b=new Bank();
for(int x=0;x<10;x++)
{
b.add(100);
}
//jihe();
}
}
很奇怪,每次问完问题后,就很快能找到问题的原因,不问的话,一下又想不到,到低是问呢?还是不问呢??有些困惑。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2