尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Java 开发 - LockSupport(提供了线程阻塞和唤醒的基础功能)

Java 开发 - LockSupport(提供了线程阻塞和唤醒的基础功能) LockSupport1、基本介绍LockSupport 是 Java 并发包中的一个工具类提供了线程阻塞和唤醒的基础功能它是构建高级同步工具的基石例如AQSLockSupport 的底层是使用 Unsafe 类来实现的2、基本使用基本使用Threadt1newThread(()-{System.out.println(Thread.currentThread().getName()进入);LockSupport.park();System.out.println(Thread.currentThread().getName()被唤醒);},t1);t1.start();try{TimeUnit.SECONDS.sleep(1);}catch(InterruptedExceptione){e.printStackTrace();}newThread(()-{System.out.println(Thread.currentThread().getName()唤醒 t1.getName());LockSupport.unpark(t1);},t2).start();# 输出结果 t1进入 t2唤醒 t1 t1被唤醒先唤醒后阻塞许可证的预先授予Threadt1newThread(()-{try{TimeUnit.SECONDS.sleep(2);}catch(InterruptedExceptione){e.printStackTrace();}System.out.println(Thread.currentThread().getName()进入);LockSupport.park();System.out.println(Thread.currentThread().getName()被唤醒);},t1);t1.start();try{TimeUnit.SECONDS.sleep(1);}catch(InterruptedExceptione){e.printStackTrace();}newThread(()-{System.out.println(Thread.currentThread().getName()唤醒 t1.getName());LockSupport.unpark(t1);},t2).start();# 输出结果 t2唤醒 t1 t1进入 t1被唤醒超时阻塞Threadt1newThread(()-{System.out.println(Thread.currentThread().getName()进入);LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(5));System.out.println(Thread.currentThread().getName()被唤醒);},t1);t1.start();try{TimeUnit.SECONDS.sleep(10);}catch(InterruptedExceptione){e.printStackTrace();}newThread(()-{System.out.println(Thread.currentThread().getName()唤醒 t1.getName());LockSupport.unpark(t1);},t2).start();# 输出结果 t1进入 t1被唤醒 t2唤醒 t1DateTimeFormatterformatterDateTimeFormatter.ofPattern(HH:mm:ss);Threadt1newThread(()-{System.out.println(Thread.currentThread().getName()进入 [formatter.format(LocalDateTime.now())]);LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(5));System.out.println(Thread.currentThread().getName()被唤醒 [formatter.format(LocalDateTime.now())]);LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(10));System.out.println(Thread.currentThread().getName()再次被唤醒 [formatter.format(LocalDateTime.now())]);},t1);t1.start();try{TimeUnit.SECONDS.sleep(10);}catch(InterruptedExceptione){e.printStackTrace();}newThread(()-{System.out.println(Thread.currentThread().getName()唤醒 t1.getName() [formatter.format(LocalDateTime.now())]);LockSupport.unpark(t1);},t2).start();# 输出结果 t1进入 [15:24:14] t1被唤醒 [15:24:19] t2唤醒 t1 [15:24:24] t1再次被唤醒 [15:24:24]
返回列表