zoukankan      html  css  js  c++  java
  • 浅谈Semaphore类-示例

    Semaphore类有两个重要方法

    1、semaphore.acquire();

    请求一个信号量,这时候信号量个数-1,当减少到0的时候,下一次acquire不会再执行,只有当执行一个release()的时候,信号量不为0的时候才可以继续执行acquire

    2、semaphore.release();

    释放一个信号量,这时候信号量个数+1,

    3、这个类使用的目的为:如何控制某个方法允许并发访问线程的个数?

    也就是说在线程里执行某个方法的时候,在方法里用该类对象进行控制,就能保证所有的线程中最多只有指定信号量个数个该方法在执行。

    示例源码

    package Semaphore;
    
    import java.util.concurrent.Semaphore;
    import java.util.concurrent.TimeUnit;
    
    public class SemaphoreTest {
    
        private static Semaphore semaphore = new Semaphore(2);
    
        public static void main(String[] args) {
    
            for (int i = 0; i < 10; i++) {
                new Thread(() -> {
                    threadLog();
                }).start();
            }
        }
    
        private static void threadLog() {
            try {
                semaphore.acquire();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            System.out.println("线程:" + Thread.currentThread().getName() + "执行了一个acquire请求操作");
    
            try{
                TimeUnit.SECONDS.sleep(1);
            }catch (Exception ex){
                ex.printStackTrace();
            }
    
            semaphore.release();
            System.out.println("线程:"+Thread.currentThread().getName()+"执行了一个release请求操作");
        }
    
    }
    

      结果如下:

  • 相关阅读:
    谷雨路
    ObjectiveC_2.0大全.pdf iOS 5 Programming Cookbook http://www.devdiv.com
    http://www.120ask.com/zjamk/13/13658784.htm
    iPhone学习系列、代码教程___持续更新中
    30天精通iPhone手机编程
    font
    iPhone开发学习资料汇总
    tools
    http://blog.csdn.net/likendsl
    http://blog.csdn.net/iukey
  • 原文地址:https://www.cnblogs.com/felixzh/p/11971735.html
Copyright © 2011-2022 走看看