Confirmed that the java.lang.Object.wait(int, int) interface exists in [java5][].

[java5]: http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Object.html

On Feb 1, 2014, at 17:36, Erik Huelsmann <ehuels@gmail.com> wrote:

Index: LispThread.java
===================================================================
--- LispThread.java (revision 14464)
+++ LispThread.java (working copy)
@@ -1004,11 +1004,12 @@
     };
 
 
+  private static DoubleFloat factor1000 = new DoubleFloat(1000);
+
     public static final long javaSleepInterval(LispObject lispSleep)
-
     {
         double d =
-            checkDoubleFloat(lispSleep.multiplyBy(new DoubleFloat(1000))).getValue();
+            checkDoubleFloat(lispSleep.multiplyBy(factor1000)).getValue();
         if (d < 0)
             type_error(lispSleep, list(Symbol.REAL, Fixnum.ZERO));
 
@@ -1015,6 +1016,17 @@
         return (d < Long.MAX_VALUE ? (long) d : Long.MAX_VALUE);
     }
 
+    public static final int javaSleepNanos(LispObject lispSleep)
+    {
+        double d = // d contains millis
+            checkDoubleFloat(lispSleep.multiplyBy(factor1000)).getValue();
+        double n = d*1000000; // n contains nanos
+        d = 1.0e6*((long)d); // convert rounded millis to nanos
+        n = n - d; // retain nanos not in millis
+
+        return (n < Integer.MAX_VALUE ? (int) n : Integer.MAX_VALUE);
+    }
+
     @DocString(name="sleep", args="seconds",
     doc="Causes the invoking thread to sleep for SECONDS seconds.\n"+
         "SECONDS may be a value between 0 1and 1.")
@@ -1025,7 +1037,8 @@
         {
 
             try {
-                Thread.sleep(javaSleepInterval(arg));
+       Thread.sleep(javaSleepInterval(arg),
+    javaSleepNanos(arg));
             }
             catch (InterruptedException e) {
                 currentThread().processThreadInterrupts();
@@ -1208,7 +1221,8 @@
 
         {
             try {
-                object.lockableInstance().wait(javaSleepInterval(timeout));
+       object.lockableInstance().wait(javaSleepInterval(timeout),
+      javaSleepNanos(timeout));
             }
             catch (InterruptedException e) {
                 currentThread().processThreadInterrupts();

-- 
"A screaming comes across the sky.  It has happened before but there is nothing 
to compare to it now."