forked from pquiring/javaforce
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathThreadQueue.java
More file actions
executable file
·83 lines (74 loc) · 2.35 KB
/
Copy pathThreadQueue.java
File metadata and controls
executable file
·83 lines (74 loc) · 2.35 KB
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package javaforce;
import java.util.concurrent.*;
/**
* Processes Runnable objects with a Thread pool.
*
* Parameters:
*
* minThreads = min threads to maintain (default 1)
* maxThreads = max threads to create as needed (default 16)
* idleSeconds = idle time a thread will run before it is freed (default 60)
*
* Ex:
* ThreadQueue queue = new ThreadQueue();
*
* queue.add(new Runnable() { public void run(){ ... }});
* or
* queue.add( () -> { ... } ); //lambda expression (Java 8+)
*
* queue.close(); //free threads
*
* @author pquiring
*/
public class ThreadQueue {
private ThreadPoolExecutor executor;
private BlockingQueue<Runnable> queue;
/** Create ThreadQueue with default settings.
* minThreads = 1
* maxThreads = 16
* idleSeconds = 60
*/
public ThreadQueue() {
queue = new LinkedBlockingQueue<Runnable>();
executor = new ThreadPoolExecutor(1, 16, 60, TimeUnit.SECONDS, queue);
}
/** Create ThreadQueue with default settings.
* minThreads = 1
* @param maxThreads = max threads
* idleSeconds = 60
*/
public ThreadQueue(int maxThreads) {
queue = new LinkedBlockingQueue<Runnable>();
executor = new ThreadPoolExecutor(1, maxThreads, 60, TimeUnit.SECONDS, queue);
}
/** Create ThreadQueue with default settings.
* @param minThreads = min threads
* @param maxThreads = max threads
* idleSeconds = 60
*/
public ThreadQueue(int minThreads, int maxThreads) {
queue = new LinkedBlockingQueue<Runnable>();
executor = new ThreadPoolExecutor(minThreads, maxThreads, 60, TimeUnit.SECONDS, queue);
}
/** Create ThreadQueue with default settings.
* @param minThreads = min threads
* @param maxThreads = max threads
* @param idleSeconds = idle seconds
*/
public ThreadQueue(int minThreads, int maxThreads, int idleSeconds) {
queue = new LinkedBlockingQueue<Runnable>();
executor = new ThreadPoolExecutor(minThreads, maxThreads, idleSeconds, TimeUnit.SECONDS, queue);
}
/** Closes the ThreadQueue (the queue is first emptied) */
public void close() {
if (executor != null) {
executor.shutdown();
executor = null;
}
queue = null;
}
/** Adds a Runnable object to ThreadQueue. */
public void add(Runnable task) {
executor.execute(task);
}
}