void acquire()
从此信号量获取一个许可,在提供一个许可前一直将线程阻塞
acquire方法总结如下:
1、尝试在非公平模式下获取一个许可,或者叫做锁。如果获取到则立即返回并将许可计数器减一,如果没有获取到,则进行2
2、进入到AQS队列自旋等待,当此节点的前驱是头结点后,又开始尝试获取锁。直至成功获取或中断取消。
以上就是关于acquire()的内部实现过程。
release()方法:释放一个许可
释放一个许可到Semaphore对象中,释放一个许可,将可用许可的数量加1.
当一个线程尝试这取释放一个许可,那么就选择另外一个线程(可重入)来获取这个许可
参考文章 https://blog.csdn.net/u010412719/article/details/52104409
https://blog.csdn.net/shihuacai/article/details/8856526
http://ifeve.com/concurrency-semaphore/#more-14753