1212 * @author GoodforGod
1313 * @since 30.10.2018
1414 */
15- public class QueueManager implements IQueueManager {
15+ public class QueueManager implements IQueueManager , AutoCloseable {
1616
1717 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 );
1919
20+ private final ScheduledExecutorService executorService = Executors .newSingleThreadScheduledExecutor ();
2021 private final Semaphore semaphore ;
2122
2223 public QueueManager (int size , int resetInSec ) {
2324 this (size , resetInSec , resetInSec );
2425 }
2526
2627 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 );
3048 }
3149
3250 @ Override
@@ -37,4 +55,9 @@ public void takeTurn() {
3755 private Runnable releaseLocks (int toRelease ) {
3856 return () -> semaphore .release (toRelease );
3957 }
58+
59+ @ Override
60+ public void close () {
61+ executorService .shutdown ();
62+ }
4063}
0 commit comments