本帖最后由 何明辉 于 2012-7-24 23:40 编辑
class Bank
{
private int sum;
Object obj=new Object();
public 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 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();
}
}
上面的程序是毕老师11天11集视频的列子。老师说上面for循环中X曾在各自的线程中,具体的指t1和t2中。我想不通的是线程中都用的是对象调用,都指向的是Cus的对象,然后覆写里面的run()方法,也就是说对同一数进行操作啊,所以x不会村在各自的线程中,如果说是存在各自的线程中的话,那么线程t1,t2就不会有关系了,打印的结果最高也是300。
另外类bank中怎么能写Thread.sleep()语句,因为bank类没有继承Thread嘛且Runnable也给Thread没有关系啊,请高手帮我解答,谢谢! |