strange behavior of future.cancel() with Executors.newWorkStealingPool()
Michał Słonina
michal.slonina at gmail.com
Mon Apr 27 19:34:30 UTC 2015
Hello folks,
I've noticed a strange behavior of future.cancel() when using work stealing
thread pool.
The JDK docs state that calling future.cancel(true) should result in task
being interrupted.
"Parameters: mayInterruptIfRunning - true if the thread executing this task
should be interrupted..." [1]
This works correctly with any executor other then work stealing pool. The
behavior is consistent on JDK8 and JDK9.
Can someone please enlighten me, did I miss something in the docs or is
this a bug ?
--- CUT HERE ---
public class Test {
public static void main(String[] args) throws InterruptedException {
ExecutorService executor = args[0].equalsIgnoreCase("UGLY")
? Executors.newWorkStealingPool() :
Executors.newFixedThreadPool(666);
Future<?> future = executor.submit(new Runnable() {
@Override
public void run() {
try {
System.out.println("STARTED");
Thread.sleep(500);
System.out.println("FINISHED. Is interrupted: " +
Thread.interrupted());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
Thread.sleep(100);
boolean cancelResult = future.cancel(true);
System.out.println("Cancel result:" + cancelResult);
Thread.sleep(1000);
System.exit(0);
}
}
--- CUT HERE ---
af1n executortest/src » java -cp . Test NICE
STARTED
Cancel result:true
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at Test$1.run(Test.java:21)
at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:265)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
af1n executortest/src » java -cp . Test UGLY
STARTED
Cancel result:true
FINISHED. Is interrupted: false
af1n executortest/src » java -version
openjdk version "1.9.0_00"
OpenJDK Runtime Environment (build 1.9.0_00-b60)
OpenJDK 64-Bit Server VM (build 1.9.0_00-b60, mixed mode)
af1n executortest/src » uname -a
Linux af1n.2r-media.de 3.16.7-7-desktop #1 SMP PREEMPT Wed Dec 17 18:00:44
UTC 2014 (762f27a) x86_64 x86_64 x86_64 GNU/Linux
--
[1]
https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html#cancel-boolean-
Kind Regards,
Michal Slonina
More information about the jdk9-dev
mailing list