线程阻塞工具:LockSupport
来源:互联网 发布:网络任务平台 编辑:程序博客网 时间:2024/06/05 01:07
LockSupport是一个实用的线程阻塞工具,提供了线程阻塞和唤醒的静态方法。
链接:http://moguhu.com/article/detail?articleId=31
LockSupport使用类似信号量的机制。当调用LockSupport.unpark()时,给当前线程提供了一个调用LockSupport.park()的许可。和信号量不同的是,这个许可不可以累加(即连续的unpark()和1次效果一样)。提供的主要方法如下:
// 阻塞当前线程,只有调用unpark(Thread thread)或者当前线程被中断,才能返回public static void park();// 在park()方法的基础上增加了超时时间,单位为nanos纳秒public static void parkNanos(long nanos);// 唤醒处于阻塞状态的threadpublic static void unpark(Thread thread);// 阻塞当前线程,知道deadline(从1970年到现在的毫秒数)public static void parkUntil(long deadline);下面给出一个简单的demo:
public class LockSupportDemo {public static Object u = new Object();static ChangeObjectThread t1 = new ChangeObjectThread("t1");static ChangeObjectThread t2 = new ChangeObjectThread("t2");public static class ChangeObjectThread extends Thread {public ChangeObjectThread(String name) {super.setName(name);}@Overridepublic void run() {synchronized (u) {System.out.println("in " + getName());LockSupport.park();System.out.println("===========");}}}public static void main(String[] args) throws InterruptedException {t1.start();Thread.sleep(100);t2.start();LockSupport.unpark(t1); // LockSupport.unpark(t1);Thread.sleep(2000);LockSupport.unpark(t2);t1.join();t2.join();}}从上述代码可以看出,LockSupport.unpark(t1)执行的条件是,有在线程t1里面执行LockSupport.park(),否则会阻塞。如果在主线程里执行两次LockSupport.unpark(t1),则效果还是一样的。
链接:http://moguhu.com/article/detail?articleId=31
阅读全文
1 0
- 线程阻塞工具:LockSupport
- 并发编程工具之七:LockSupport(线程阻塞工具类)
- JDK并发包---(11)线程阻塞工具类:LockSupport
- AQS阻塞唤醒工具LockSupport
- Java线程阻塞中断和LockSupport问题
- Java线程阻塞中断和LockSupport问题
- java线程阻塞中断与LockSupport使用介绍
- Java线程阻塞中断和LockSupport的常见问题
- java线程阻塞中断和LockSupport的常见问题
- java线程阻塞中断和LockSupport的常见问题
- java基础线程-LockSupport
- Java多线程--LockSupport工具
- 线程并发工具--阻塞队列
- AQS(三):阻塞、唤醒:LockSupport (r)
- 多线程(十七)AQS(三):阻塞、唤醒:LockSupport
- Java并发工具类LockSupport
- UI线程阻塞监控工具----BlockCanary
- LockSupport
- HDOJ2187悼念512汶川大地震遇难同胞(贪心,硬币问题)
- 使用MyBatis Generator自动创建代码
- const与#define的比较
- Redis事务
- 前端之JS-数组去重
- 线程阻塞工具:LockSupport
- 本渣的Python学习之路——2(基本数据类型)
- UVA 10474
- 网易2017内推 [编程题]独立的小易@Java
- Brother打印机的安装
- Log4j配置文件的加载
- 01.Python基础知识
- SqueezeNet网络的OHEM
- 邝斌的ACM模板(模线性方程组)