1 package com.thread.test.thread;
2
3 import java.util.Random;
4 import java.util.concurrent.*;
5
6
17 public class MySemaphore {
18
19 public static void main(String[] args) {
20 Semaphore sp = new Semaphore(5, 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 }
项目地址:github.com/windwant/wi…