1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package org.apache.http.impl.bootstrap;
28
29 import java.util.HashSet;
30 import java.util.Map;
31 import java.util.Set;
32 import java.util.concurrent.BlockingQueue;
33 import java.util.concurrent.ConcurrentHashMap;
34 import java.util.concurrent.ThreadFactory;
35 import java.util.concurrent.ThreadPoolExecutor;
36 import java.util.concurrent.TimeUnit;
37
38
39
40
41 class WorkerPoolExecutor extends ThreadPoolExecutor {
42
43 private final Map<Worker, Boolean> workerSet;
44
45 public WorkerPoolExecutor(
46 final int corePoolSize,
47 final int maximumPoolSize,
48 final long keepAliveTime,
49 final TimeUnit unit,
50 final BlockingQueue<Runnable> workQueue,
51 final ThreadFactory threadFactory) {
52 super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory);
53 this.workerSet = new ConcurrentHashMap<Worker, Boolean>();
54 }
55
56 @Override
57 protected void beforeExecute(final Thread t, final Runnable r) {
58 if (r instanceof Worker) {
59 this.workerSet.put((Worker) r, Boolean.TRUE);
60 }
61 }
62
63 @Override
64 protected void afterExecute(final Runnable r, final Throwable t) {
65 if (r instanceof Worker) {
66 this.workerSet.remove(r);
67 }
68 }
69
70 public Set<Worker> getWorkers() {
71 return new HashSet<Worker>(this.workerSet.keySet());
72 }
73
74 }