|
就是加的System.out.println(), 这里。。。
public class Transfer {
public static void main(String[] args) throws Exception
{
Record r1 = new Record();
Record r2 = new Record();
doTransfer( r1, r2, 5 );
doTransfer( r2, r1, 2 );
doTransfer( r1, r2, 1 );
//print the result
//System.out.println( "r1 = " + r1.get() + " r2 = " + r2.get() );
}
private static void doTransfer(final Record a, final Record b, final int amount)
{
Thread t = new Thread()
{
public void run()
{
new Clerk().transfer(a, b, amount);
}
};
t.start();
}
}
class Clerk
{
public synchronized void transfer(Record a, Record b, int amount)
{
synchronized(a)
{
System.out.println("**********start synchronized(a)****************");
synchronized(b)
{
System.out.println("**********start synchronized(b)****************");
a.add( -amount );
//System.out.println("after a.add num="+num);
System.out.println(" a.get()="+a.get());
b.add( amount );
//System.out.println("after b.add num="+num);
System.out.println(" b.get()="+b.get());
System.out.println("**********end synchronized(b)****************");
}
}
System.out.println("**********end synchronized(a)****************");
}
}
class Record
{
int num = 10;
public int get()
{
return this.num;
}
public void add(int n)
{
System.out.println("num = num + n="+"="+num+"+"+n);
num = num + n;
System.out.println(" num="+num);
}
} |
|