private Lock lock = new ReentrantLock(); private Condition condition = lock.newCondition(); public void method1(){ try { lock.lock(); Thread.sleep(1000); condition.await(); System.out.println("当前线程:" + Thread.currentThread().getName() + "可以动了"); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } }
public void method2(){ try { lock.lock(); Thread.sleep(3000); condition.signal(); //相当于Object notify---c1.signalAll()唤醒所有; System.out.println("当前线程:" + Thread.currentThread().getName() + "发出唤醒.."); } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock(); } }
new ReentrantLock(true/false);非公平锁/公平锁,公平锁耗费性能;