-
Notifications
You must be signed in to change notification settings - Fork 24
Expand file tree
/
Copy pathThreadQueue.java
More file actions
executable file
·53 lines (45 loc) · 1.17 KB
/
ThreadQueue.java
File metadata and controls
executable file
·53 lines (45 loc) · 1.17 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
package javaforce;
/**
* A special thread that will execute Runnable objects placed in queue.
*
* Ex:
* ThreadQueue queue = new ThreadQueue();
* queue.start();
*
* queue.add(new Runnable() { public void run(){ ... }});
* or
* queue.add( () -> { ... } ); //lambda expression (Java 8+)
*
* @author pquiring
*/
import java.util.concurrent.*;
public class ThreadQueue extends Thread {
private BlockingQueue<Runnable> queue;
private boolean active = true;
public ThreadQueue() {
queue = new ArrayBlockingQueue<Runnable>(16);
}
public ThreadQueue(int capacity) {
queue = new ArrayBlockingQueue<Runnable>(capacity);
}
public void run() {
try {
while (active) {
Runnable r = queue.take();
r.run();
}
} catch (Exception e) {
JFLog.log(e);
}
}
/** Closes the ThreadQueue (the queue is first emptied) */
public void close() {
active = false;
//wake up thread if waiting for next Runnable
add(new Runnable() { public void run(){}});
}
/** Adds a Runnable object to ThreadQueue. */
public void add(Runnable r) {
queue.add(r);
}
}