打印结果为(两个线程是顺序执行的):

 

read1 begin
read1 end
read2 begin
read2 end

  如果去掉read2前面的synchronized关键字,打印为(线程出现了交叉执行):

 

read1 begin
read2 begin
read2 end
read1 end

  修改read2方法,

 

public void read2() {
synchronized(this)
{
System.out.println("read2 begin");
try {
Thread.currentThread().sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("read2 end");
}
}

  对this进行加锁,结果同一次,线程是顺序执行的。