@ -92,6 +92,8 @@ public class SimpleAsyncTaskExecutor extends CustomizableThreadCreator
@@ -92,6 +92,8 @@ public class SimpleAsyncTaskExecutor extends CustomizableThreadCreator
@Nullable
privateSet<Thread>activeThreads;
privatebooleancancelRemainingTasksOnClose=false;
privatebooleanrejectTasksWhenLimitReached=false;
privatevolatilebooleanactive=true;
@ -184,12 +186,33 @@ public class SimpleAsyncTaskExecutor extends CustomizableThreadCreator
@@ -184,12 +186,33 @@ public class SimpleAsyncTaskExecutor extends CustomizableThreadCreator
@ -249,6 +272,15 @@ public class SimpleAsyncTaskExecutor extends CustomizableThreadCreator
@@ -249,6 +272,15 @@ public class SimpleAsyncTaskExecutor extends CustomizableThreadCreator
@ -353,7 +385,7 @@ public class SimpleAsyncTaskExecutor extends CustomizableThreadCreator
@@ -353,7 +385,7 @@ public class SimpleAsyncTaskExecutor extends CustomizableThreadCreator
@ -364,17 +396,26 @@ public class SimpleAsyncTaskExecutor extends CustomizableThreadCreator
@@ -364,17 +396,26 @@ public class SimpleAsyncTaskExecutor extends CustomizableThreadCreator
this.active=false;
Set<Thread>threads=this.activeThreads;
if(threads!=null){
synchronized(threads){
try{
if(!threads.isEmpty()){
threads.wait(this.taskTerminationTimeout);
if(this.cancelRemainingTasksOnClose){
// Early interrupt for remaining tasks on close
threads.forEach(Thread::interrupt);
}
if(this.taskTerminationTimeout>0){
synchronized(threads){
try{
if(!threads.isEmpty()){
threads.wait(this.taskTerminationTimeout);
}
}
catch(InterruptedExceptionex){
Thread.currentThread().interrupt();
}
}
catch(InterruptedExceptionex){
Thread.currentThread().interrupt();
if(!this.cancelRemainingTasksOnClose){
// Late interrupt for remaining tasks after timeout