Java LockSupport 实战 Love The Way You Lie 2021-07-24 21:49 339阅读 0赞 # 一 代码 # package com.mashibing.juc.c_020; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.LockSupport; public class T13_TestLockSupport { public static void main(String[] args) { Thread t = new Thread(() -> { for (int i = 0; i < 10; i++) { System.out.println(i); if (i == 5) { LockSupport.park(); // 当前线程停(阻塞)在这里,当其他位置执行 LockSupport.unpark(t); 时,当前线程继续往下跑 } try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } } }); t.start(); // // 版本一:不等待8秒,调用 unpark() // // t 线程即使有 park,t 线程也不会阻塞,还是放行 // LockSupport.unpark(t); // // 版本二:等待8秒,调用 unpark() // try { // TimeUnit.SECONDS.sleep(8); // } catch (InterruptedException e) { // e.printStackTrace(); // } // System.out.println("after 8 senconds!"); // // t 线程,别停(阻塞)了,可以走了 // LockSupport.unpark(t); } } # 二 测试 # **1 版本一的测试结果** > 0 > > 1 > > 2 > > 3 > > 4 > > 5 > > 6 > > 7 > > 8 > > 9 **2 版本二的测试结果** > 0 > > 1 > > 2 > > 3 > > 4 > > 5 > > after 8 senconds! > > 6 > > 7 > > 8 > > 9 # 三 说明 # 版本一:提前就有通行证(LockSupport.unpark(t)),遇到警察不用停。 版本二:没有通行证,遇到警察必须停,拿到通信证(LockSupport.unpark(t)),才能走。
还没有评论,来说两句吧...