你的位置:首页 > 软件开发 > Java > Semaphore 并发工具

Semaphore 并发工具

发布时间:2016-10-21 18:00:23
1 package com.thread.test.thread; 2 3 import java.util.Random; 4 import java.util.concurrent.*; 5 6 /** 7 * Semaphore 8 * 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); //公平性 构造函数 true21     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 }

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:Semaphore 并发工具

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录