diff -r f160dec9a350 src/java.base/share/classes/java/lang/Thread.java --- a/src/java.base/share/classes/java/lang/Thread.java Mon Jul 27 18:51:29 2015 -0700 +++ b/src/java.base/share/classes/java/lang/Thread.java Tue Sep 08 02:01:15 2015 -0700 @@ -912,12 +912,21 @@ public void interrupt() { if (this != Thread.currentThread()) checkAccess(); - + synchronized (blockerLock) { Interruptible b = blocker; if (b != null) { interrupt0(); // Just to set the interrupt flag + + try { + sleep(200); + } + catch(Exception e) { + e.printStackTrace(); + } + b.interrupt(this); + return; } } diff -r f160dec9a350 src/java.base/share/classes/java/nio/channels/spi/AbstractInterruptibleChannel.java --- a/src/java.base/share/classes/java/nio/channels/spi/AbstractInterruptibleChannel.java Mon Jul 27 18:51:29 2015 -0700 +++ b/src/java.base/share/classes/java/nio/channels/spi/AbstractInterruptibleChannel.java Tue Sep 08 02:01:15 2015 -0700 @@ -168,6 +168,10 @@ }}; } blockedOn(interruptor); + double count = 0; + double limit = Math.random() * 50000; + while(count < limit) + count = count + 0.0003; Thread me = Thread.currentThread(); if (me.isInterrupted()) interruptor.interrupt(me); diff -r f160dec9a350 src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java --- a/src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java Mon Jul 27 18:51:29 2015 -0700 +++ b/src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java Tue Sep 08 02:01:15 2015 -0700 @@ -124,7 +124,7 @@ } } } - + // signal any threads blocked on this channel threads.signalAndWait(); @@ -888,6 +888,10 @@ if (!isOpen()) return null; + double count = 0; + while(count < 40000) + count = count + 0.0003; + long filesize; do { filesize = nd.size(fd);