博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【代码积累】semaphore
阅读量:4099 次
发布时间:2019-05-25

本文共 1354 字,大约阅读时间需要 4 分钟。

import java.util.concurrent.LinkedBlockingQueue;import java.util.concurrent.Semaphore;public class OperationQueue
{ private LinkedBlockingQueue
queue = null; private Semaphore semaphore = new Semaphore(1); public OperationQueue(int capacity) { queue = new LinkedBlockingQueue
(capacity); } public void addElement(T element) { try { queue.put(element); /*如果要使用LBQ的阻塞特性,一定要使用put/take方法*/ } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public T getElement() { T t = null; try { /*对于一个线程,并没有持有信号量一说,对信号量的操作只是改变信号量的permits的数值,当permits为0时,试图acquire信号量的线程被挂起,直到permits非0*/ semaphore.acquire(); /*默认支持中断,抛异常。线程被挂起期间,可被中断,响应中断后标志位清除。*/ System.out.println("EventConsumer gets SEMAPHORE."); t = get(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); semaphore.release(); /*increase permits by one,or increase by a given amount*/ } /*无异常,则不释放信号量,由handler来释放信号量*/ return t; } public void releaseSemaphore() { semaphore.release(); } public T get() { T t = null; try { t = queue.take(); /*注意LBQ的poll方法在队列为空时不会阻塞,直接返回null,而take方法会阻塞*/ } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } return t; } public boolean isEmpty() { return queue.isEmpty(); }}

转载地址:http://lvhii.baihongyu.com/

你可能感兴趣的文章
京东实战:由浅入深精通SpringCloud微服务架构
查看>>
Tomcat性能优化前后,有多大的差距,今天测试给大家看
查看>>
一连问了好几个大佬,竟然都不知道Redis为什么默认16个数据库?
查看>>
Github下载即将破百万的PDF:双十一高并发亿级流量秒杀顶级教程
查看>>
面试又栽在JVM上了?一份JVM核心面试指南点助你横扫BATJ面试官!
查看>>
史上最牛Linux详解,看完直接带你由入门到精通!
查看>>
2020最新Nginx教程全面详解,从入门到实践(Nginx快速上手)
查看>>
不会 Java 注解 ? 看这一篇文章!
查看>>
Java开发必备 Git 分支开发:规范指南及完全学会Git的24堂课笔记
查看>>
Redis深度历险:核心原理和应用实践带你由入门走向精通
查看>>
全网首发:阿里云面试真题公开,想面阿里,按照这样做准备
查看>>
一篇文章吃透Java多线程编程核心技术,敢于直面面试官多线程问题
查看>>
开发五年,如何在一年内从13k到大厂30k,全靠这份《java面试宝典》!
查看>>
深入P8级别JAVA底层知识:你知道阿里P8需要掌握哪些技术吗?
查看>>
Java基础知识点总结
查看>>
Java的新未来:逐渐“Kotlin化”
查看>>
Java反射是什么?看这篇绝对会了!
查看>>
京东T9用一份900页SpringBoot笔记让你像搭积木一样构建系统架构
查看>>
目前开发中爆火的Java、Go和Rust间的比较!
查看>>
Java语言新特性?封印类
查看>>