Skip to content

Commit

Permalink
Make shutdownNow() method consistent with ExecutorService
Browse files Browse the repository at this point in the history
  • Loading branch information
terzerm committed Nov 27, 2018
1 parent ca6f519 commit b7be8a1
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 4 deletions.
5 changes: 4 additions & 1 deletion src/main/java/org/tools4j/nobark/run/Shutdownable.java
Expand Up @@ -23,6 +23,7 @@
*/
package org.tools4j.nobark.run;

import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;

Expand Down Expand Up @@ -55,8 +56,10 @@ public interface Shutdownable {
* to do that.
* <p>
* Invocation has no additional effect if already shut down.
*
* @return list of tasks that never commenced execution if any, otherwise an empty list
*/
void shutdownNow();
List<Runnable> shutdownNow();

/**
* Returns {@code true} if this service has been shut down.
Expand Down
6 changes: 5 additions & 1 deletion src/main/java/org/tools4j/nobark/run/ShutdownableThread.java
Expand Up @@ -23,6 +23,8 @@
*/
package org.tools4j.nobark.run;

import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
Expand Down Expand Up @@ -92,12 +94,14 @@ public void shutdown() {
state.compareAndSet(RUNNING, SHUTDOWN);
}


@Override
public void shutdownNow() {
public List<Runnable> shutdownNow() {
final int shutdownAndNow = SHUTDOWN | SHUTDOWN_NOW;
if (!state.compareAndSet(RUNNING, shutdownAndNow)) {
state.compareAndSet(SHUTDOWN, shutdownAndNow);
}
return Collections.emptyList();
}

private boolean isMainRunning() {
Expand Down
Expand Up @@ -23,6 +23,7 @@
*/
package org.tools4j.nobark.run;

import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
Expand All @@ -33,6 +34,7 @@

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.tools4j.nobark.run.StoppableThreadTest.catchAll;

Expand Down Expand Up @@ -119,10 +121,11 @@ public void shutdownNowAfterShutdown() {
assertFalse(thread.isTerminated());

//when
thread.shutdownNow();
final List<Runnable> notStarted = thread.shutdownNow();

//then
assertTrue(thread.isShutdown());
assertTrue(notStarted.isEmpty());

//when
thread.awaitTermination(5, TimeUnit.SECONDS);
Expand All @@ -131,11 +134,12 @@ public void shutdownNowAfterShutdown() {
assertTrue(thread.isTerminated());

//when
thread.shutdownNow();
final List<Runnable> stillNotStarted = thread.shutdownNow();

//then
assertTrue(thread.isShutdown());
assertTrue(thread.isTerminated());
assertSame(notStarted, stillNotStarted);
}


Expand Down

0 comments on commit b7be8a1

Please sign in to comment.