使用同一个对象锁+synchronized实现线程同步
class RunnableCase2 implements Runnable{ public void run() { synchronized (this) { try { System.out.println(Thread.currentThread().getId()+"-start"); Thread.sleep(5000); System.out.println(Thread.currentThread().getId()+"-end"); } catch (InterruptedException e) { e.printStackTrace(); } } } }
测试
RunnableCase2 r2 = new RunnableCase2(); Thread t1 = new Thread(r2); Thread t2 = new Thread(r2); t1.start(); t2.start();
输出
9-start 9-end 10-start 10-end
----------------------------------------------------------
以下不能实现线程同步,因为不是用的同一个对象锁
class ThreadCase2 extends Thread{ public void run(){ synchronized(this){ try { System.out.println(Thread.currentThread().getId()+"-start"); Thread.sleep(5000); System.out.println(Thread.currentThread().getId()+"-end"); } catch (InterruptedException e) { e.printStackTrace(); } } } }
ThreadCase2 t1 = new ThreadCase2(); ThreadCase2 t2 = new ThreadCase2(); t1.start(); t2.start();
