zoukankan      html  css  js  c++  java
  • Jdk的java.util.concurrent包中已经实现了一个Semaphore类(信号量的用法),主要用于多线程情况下控制某个方法的并发数

    该类有如下一些特点: 
    1、Semaphore是带有Counting、相当于维护了一定数量的通行证、如上面举的例子里面的100辆车 
    2、该类的acquire方法是为了申请通行证的、该方法可能会Block(这里并没有使用synchronization、因为否则的话release也没法执行)、就是当通行证全部被申请完了之后。而对应的release方法则是释放通行证的、这样该方法执行后可能会让原来Block的acquire方法得以继续执行。 
    3、上面2的执行过程中其实并没有类似于通行证这样的对象、Semaphore只是维护了一个许可的计数器。 
    4、如果Semaphore的计数器为1(又叫binary Semaphore)的话则相当于一个互斥锁 

    实际应用中、对象池和线程池都有使用如此的方式控制线程的使用量。 

    private Semaphore semaphore;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    semaphore = new Semaphore(5);

    for (int i = 0; i < 1000; i++) {
    new Thread(new Runnable() {
    @Override
    public void run() {
    showLog();
    }
    }).start();
    }


    }
    private void showLog(){
    try {

    //获取许可
    semaphore.acquire();
    Log.i("xqxinfo","线程:"+Thread.currentThread().getName()+"执行了一个acquire请求操作");
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    // 线程休眠1s
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }

    //释放许可
    semaphore.release();
    Log.i("xqxinfo","线程:"+Thread.currentThread().getName()+"执行了一个release请求操作");


    }

  • 相关阅读:
    结对-贪吃蛇游戏-需求分析
    结对-贪吃蛇游戏-结对项目总结
    团队-团队编程项目作业名称-成员简介及分工
    《结对-结对编项目作业名称-需求分析》猜拳游戏安卓
    《20170830-构建之法:现代软件工程-阅读笔记》本周阅读了第四章的第四节
    对软件工程的期望
    自我介绍
    GIT基本使用方法
    结对-简易计算器-设计文档
    结对-简易计算器-开发环境搭建过程
  • 原文地址:https://www.cnblogs.com/xiaohan666/p/10275860.html
Copyright © 2011-2022 走看看