版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yueloveme/article/details/86492458
大家推荐个靠谱的公众号程序员探索之路,大家一起加油,这个公众号已经接入图灵 方法目的:测试condition.signal();会把唤醒的线程加入到等待队列中 public static void main(String[] args) { ReentrantLock reentrantLock = new ReentrantLock(); Condition condition = reentrantLock.newCondition(); new Thread(new Runnable() { @Override public void run() { try { reentrantLock.lock(); condition.await(); System.out.println(Thread.currentThread().getName()+"我是那个await的线程"); } catch (InterruptedException e) { System.out.println("中断了"); }finally { reentrantLock.unlock(); } } }).start(); try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } new Thread(new Runnable() { @Override public void run() { try { reentrantLock.lock(); System.out.println("111111"); Thread.sleep(10000); System.out.println(Thread.currentThread().getName()+"我睡了10s"); } catch (InterruptedException e) { e.printStackTrace(); } finally { reentrantLock.unlock(); } } }).start(); // new Thread(new Runnable() { // @Override // public void run() { // try { // reentrantLock.lock(); // System.out.println("111111"); // Thread.sleep(10000); // System.out.println("我睡了10s"); // } catch (InterruptedException e) { // e.printStackTrace(); // }finally { // reentrantLock.unlock(); // } // } // }).start(); reentrantLock.lock(); condition.signal(); reentrantLock.unlock(); }
结果:
Thread-0我是那个await的线程
111111
Thread-1我睡了10s
可以看到一个现象,await那个线程直接运行了await下面的输出语句,这就意味着 我把线程唤醒然后直接就运行了,没有加入到等待
队列中???????????那单Dong lea欺骗了我们
实际分析一个 睡10s那个线程start之后没有抢到时间片,main线程直接将await线程唤醒那么就不需等待了,正解(Y)