12
12
* @author GoodforGod
13
13
* @since 30.10.2018
14
14
*/
15
- public class QueueManager implements IQueueManager {
15
+ public class QueueManager implements IQueueManager , AutoCloseable {
16
16
17
17
public static final QueueManager DEFAULT_KEY_QUEUE = new QueueManager (1 , 7 );
18
- public static final QueueManager PERSONAL_KEY_QUEUE = new QueueManager (2 , 1 );
18
+ public static final QueueManager PERSONAL_KEY_QUEUE = new QueueManager (5 , 1100L , 1100L , 5 );
19
19
20
+ private final ScheduledExecutorService executorService = Executors .newSingleThreadScheduledExecutor ();
20
21
private final Semaphore semaphore ;
21
22
22
23
public QueueManager (int size , int resetInSec ) {
23
24
this (size , resetInSec , resetInSec );
24
25
}
25
26
26
27
public QueueManager (int size , int queueResetTimeInSec , int delayInSec ) {
27
- this .semaphore = new Semaphore (size );
28
- Executors .newSingleThreadScheduledExecutor ()
29
- .scheduleAtFixedRate (releaseLocks (size ), delayInSec , queueResetTimeInSec , TimeUnit .SECONDS );
28
+ this (size , queueResetTimeInSec , delayInSec , size );
29
+ }
30
+
31
+ public QueueManager (int size ,
32
+ int queueResetTimeInSec ,
33
+ int delayInSec ,
34
+ int initialSize ) {
35
+ this (size ,
36
+ (long ) queueResetTimeInSec * 1000 ,
37
+ (long ) delayInSec * 1000 ,
38
+ initialSize );
39
+ }
40
+
41
+ public QueueManager (int size ,
42
+ long queueResetTimeInMillis ,
43
+ long delayInMillis ,
44
+ int initialSize ) {
45
+ this .semaphore = new Semaphore (initialSize );
46
+ this .executorService .scheduleAtFixedRate (releaseLocks (size ), delayInMillis , queueResetTimeInMillis ,
47
+ TimeUnit .MILLISECONDS );
30
48
}
31
49
32
50
@ Override
@@ -37,4 +55,9 @@ public void takeTurn() {
37
55
private Runnable releaseLocks (int toRelease ) {
38
56
return () -> semaphore .release (toRelease );
39
57
}
58
+
59
+ @ Override
60
+ public void close () {
61
+ executorService .shutdown ();
62
+ }
40
63
}
0 commit comments