diff -Naur jdk8.orig/jdk/src/share/classes/java/lang/Thread.java jdk8/jdk/src/share/classes/java/lang/Thread.java
--- jdk8.orig/jdk/src/share/classes/java/lang/Thread.java	2015-06-05 14:50:08.649527076 +0300
+++ jdk8/jdk/src/share/classes/java/lang/Thread.java	2015-06-05 14:51:43.135521481 +0300
@@ -36,6 +36,7 @@
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.locks.LockSupport;
+import java.util.concurrent.TimeUnit;
 import sun.nio.ch.Interruptible;
 import sun.reflect.CallerSensitive;
 import sun.reflect.Reflection;
@@ -1233,7 +1234,7 @@
      */
     public final synchronized void join(long millis)
     throws InterruptedException {
-        long base = System.currentTimeMillis();
+        long base = System.nanoTime();
         long now = 0;
 
         if (millis < 0) {
@@ -1251,7 +1252,7 @@
                     break;
                 }
                 wait(delay);
-                now = System.currentTimeMillis() - base;
+                now = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - base);
             }
         }
     }