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
(#换成@)。