并发工具类之 LockSupport

x33g5p2x  于2021-12-18 转载在 其他  
字(0.5k)|赞(0)|评价(0)|浏览(339)

当需要阻塞或唤醒一个线程的时候,我们可以使用 LockSupport 工具类来完成,它提供的部分方法如下图:

测试代码如下:

  1. public class TestLockSupport {
  2. public static void main(String[] args) {
  3. Thread thread = new Thread(() -> {
  4. for (int i = 0; i < 10; i++) {
  5. System.out.println(i);
  6. if (i == 5) {
  7. // 阻塞当前线程
  8. LockSupport.park();
  9. }
  10. try {
  11. TimeUnit.SECONDS.sleep(1);
  12. } catch (InterruptedException e) {
  13. e.printStackTrace();
  14. }
  15. }
  16. });
  17. thread.start();
  18. try {
  19. TimeUnit.SECONDS.sleep(8);
  20. } catch (InterruptedException e) {
  21. e.printStackTrace();
  22. }
  23. System.out.println("现在是 8 秒后");
  24. // 唤醒指定的线程,并且 unpark 可以再 park 前调用
  25. LockSupport.unpark(thread);
  26. }
  27. }

控制台输出如下:

  1. 0
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7. 现在是 8 秒后
  8. 6
  9. 7
  10. 8
  11. 9

相关文章