我想证明下,一个线程锁住一个对象后,与此同时别的线程还可以执行另外的方法。
public class TestTT implements Runnable
{
int i=100;
public synchronized void m1() throws Exception
{
i=1000;
Thread.sleep(10000); 
System.out.println("b= "+i);
}

public void m2()
{
System.out.println(i);
}

public void run()
{
try{
m1();
}
catch(Exception e)
{
e.printStackTrace();
}
}

public static void main(String[] args)
{
TestTT tt=new TestTT();
Thread t=new Thread(tt);
t.start();

try{
Thread.sleep(1000);
}
catch(InterruptedException e)
{
e.printStackTrace();
}

tt.m2();//为什么会输出1000?m1上锁之后主线程不是看不到m1里面的内容吗?

}
}

解决方案 »

  1.   

    我觉得main方法里调用m2()i 的值应该是100 啊,怎么会是1000呢
      

  2.   

    不是看不到,而是不能同时访问,synchronized 的意思是当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。