打印结果为(两个线程是顺序执行的):
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进行加锁,结果同一次,线程是顺序执行的。