public class SynchronizedDEmo { public static void main(String[] args) { TestThread tt = new TestThread(); Thread t1 = new Thread(tt); Thread t2 = new Thread(tt); t1.setName("t1"); t2.setName("t2"); t1.start(); t2.start(); } } class TestThread implements Runnable{ private static int num = 0; public void run() { synchronized(this){ //此处this指的是进入此代码块的线程对象,如果t1进来了,那么锁住t1,若t1时间片结束了,
t2走到此处也只能在上一句代码处等待t1获得了时间片后执行完synchronized锁住的所有代码,
t2才能进去执行,若去掉synchronized(this),则t1和t2随时都可以进来执行此段代码中的任何一步,
时间到了另一个接着进来执行 for( int i = 0; i < 20 ; i++){ num ++ ; try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + ":" + num); } } } }