public class XYX
{
public static void main(String[] args) 
{
Thread a = new Thread(new MyThread());
Thread b = new Thread(new MyThread());

a.start();
b.start();
}
}class MyThread implements Runnable
{
static volatile private int X = 20;
private int y = 0;

public synchronized int XXX()
{
System.out.println("1");
int a = 10;
y = (int)(Math.random() * a);
try 
{
X = X - y ;
Thread.sleep(10); X = X + y ;
Thread.sleep(10);

catch (InterruptedException e) 
{
e.printStackTrace();
}
System.out.println("2");
return X; }

public void run() 
{
for(int i = 0 ; i <100 ; i++)
{
System.out.println(Thread.currentThread() + "  X = " + XXX());
}
}
}
在方法的开头和结尾位置加了两条打印语句,怎么结果是这样的~?同步方法不是执行完后才会释放锁对象么~?难道sleep方法也会~?百思不得其解···
Thread[Thread-1,5,main]  X = 20
2
Thread[Thread-0,5,main]  X = 20
1
1
2
Thread[Thread-0,5,main]  X = 20
2
Thread[Thread-1,5,main]  X = 20
1
1
2
Thread[Thread-0,5,main]  X = 12
1
2
Thread[Thread-1,5,main]  X = 8