zoukankan      html  css  js  c++  java
  • Java并发工具类Semaphore应用实例

     1 package com.thread.test.thread;
     2 
     3 import java.util.Random;
     4 import java.util.concurrent.*;
     5 
     6 /**
     7  * Semaphore
     8  * Semaphore维护者一组权限,无实体权限,只是一组代表权限的数字,
     9  * 每一次执行acquire都会被阻塞,直到获取获取权限,
    10  * 每一次执行release都会释放权限,唤醒阻塞acquire线程
    11  *
    12  * Semaphore通常应用于限制资源访问
    13  *
    14  *
    15  * Created by windwant on 2016/5/27.
    16  */
    17 public class MySemaphore {
    18 
    19     public static void main(String[] args) {
    20         Semaphore sp = new Semaphore(5, true);  //公平性 构造函数 true
    21         ExecutorService es = Executors.newCachedThreadPool();
    22         Random r = new Random();
    23         for (int i = 0; i < 10; i++){
    24             es.execute(new Needer(sp, r.nextInt(10), "needer" + i));
    25         }
    26         es.shutdown();
    27     }
    28 }
    29 
    30 class Needer implements Runnable{
    31 
    32     private Semaphore sp;
    33 
    34     private int seconds;
    35 
    36     private String neederName;
    37 
    38     Needer(Semaphore sp, int seconds, String neederName){
    39         this.sp = sp;
    40         this.seconds = seconds;
    41         this.neederName = neederName;
    42     }
    43 
    44     public void run() {
    45         try{
    46             sp.acquire();
    47             System.out.println("needer " + neederName + " begin, need time: " + seconds + "s");
    48             long b = System.currentTimeMillis();
    49             for (int i = 0; i < seconds; i++) {
    50                 Thread.sleep(1000);
    51                 System.out.println("needer: " + neederName + "============" + i + "============");
    52             }
    53             long d = System.currentTimeMillis() - b;
    54             System.out.println("needer " + neederName + " over, executing time: " + TimeUnit.SECONDS.convert(d, TimeUnit.MILLISECONDS));
    55             sp.release();
    56         } catch (InterruptedException e) {
    57             e.printStackTrace();
    58         }
    59     }
    60 }

    项目地址:https://github.com/windwant/windwant-demo/tree/master/thread-demo

  • 相关阅读:
    谁的朱砂痣染白了谁的白月光
    随机数
    常见面试简单汇总整理
    oss分页列举遍历文件创建软链接
    oss创建软链接
    看英文文档的好处
    js原型链相关
    js 中的this指向问题
    jquery.fn.init
    转载
  • 原文地址:https://www.cnblogs.com/niejunlei/p/5985349.html
Copyright © 2011-2022 走看看