Java多线程之线程阻塞原语LockSupport的使用
2017-03-16 11:31
239 查看
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6558597.html
看名字就知道了,LockSupport——提供对加锁机制的支持。
它是提供线程阻塞的原语,很多同步工具对线程的阻塞都是靠它来实现的。
一:使用
LockSupport提供了一系列的静态方法对线程进行禁用与启用操作,我们之间通过类名即可调用。
阻塞线程:在需要阻塞线程的地方,通过 LockSupport.park()/LockSupport.park(blocker) 阻塞当前线程;
解除线程阻塞:通过 LockSupport.unpark(thread) 解除参数thread的阻塞。
二:新特性
阻塞线程时的许可:park()方法可以传进去一个 Object 类型的参数 block,这是一个许可证,相当于 值为1的semaphore。当前线程通过park()方法获取这个许可进行阻塞后,其他线程就不能再获取了,只能通过unpark(thread)解除这个线程阻塞并释放这个许可。
许可的作用:因为park() 和 unpark()有许可的存在;调用 park() 的线程和另一个试图将其 unpark() 的线程之间的竞争将保持活性,使得不会遇到“Thread.suspend 和 Thread.resume所可能引发的死锁”问题。
看名字就知道了,LockSupport——提供对加锁机制的支持。
它是提供线程阻塞的原语,很多同步工具对线程的阻塞都是靠它来实现的。
一:使用
LockSupport提供了一系列的静态方法对线程进行禁用与启用操作,我们之间通过类名即可调用。
阻塞线程:在需要阻塞线程的地方,通过 LockSupport.park()/LockSupport.park(blocker) 阻塞当前线程;
解除线程阻塞:通过 LockSupport.unpark(thread) 解除参数thread的阻塞。
二:新特性
阻塞线程时的许可:park()方法可以传进去一个 Object 类型的参数 block,这是一个许可证,相当于 值为1的semaphore。当前线程通过park()方法获取这个许可进行阻塞后,其他线程就不能再获取了,只能通过unpark(thread)解除这个线程阻塞并释放这个许可。
许可的作用:因为park() 和 unpark()有许可的存在;调用 park() 的线程和另一个试图将其 unpark() 的线程之间的竞争将保持活性,使得不会遇到“Thread.suspend 和 Thread.resume所可能引发的死锁”问题。
相关文章推荐
- Java中线程的使用 (2)-多线程、线程优先级、线程睡眠、让步、阻塞
- 学习java多线程的笔记3-使用BlockingQueue阻塞队列来模拟两个线程之间的通信
- 初学Java多线程:使用Runnable接口创建线程
- (13)多线程与并发库之java5阻塞队列(BlockingQueue)的应用----子线程循环10次,接着主线程循环100次,接着又回到子线程循环10次,接着再回到主线程循环100次,如此循环50次
- JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没
- Java实现多线程经典问题:使用三个线程实现输出ABCABC循环
- java多线程的基本概念与线程的使用方法
- java线程阻塞中断与LockSupport使用介绍
- (2.1.2)Java线程:多线程的基本概念和使用
- Java多线程之~~~使用ThreadPoolExecutor来创建线程
- Java -- 使用阻塞队列(BlockingQueue)控制线程通信
- java多线程系列_使用Runnable接口创建线程(3)
- Java:多线程,使用同步锁(Lock)时利用Condition类实现线程间通信
- 12-使用java5条件阻塞condition实现线程间通信-实现线程间通信方式(2)
- 初学Java多线程【3】:使用Runnable接口创建线程
- Java 多线程使用:线程的挂起与重新唤醒
- 多线程之Java线程阻塞与唤醒
- java多线程编程之使用runnable接口创建线程
- 【Java总结-线程】Java多线程的使用
- 使用java jstack查看程序线程阻塞点方便调试性能