OpenJDK8 Thread.sleep will deadlock while turn down system date time.

Konstantin Belousov kostikbel at gmail.com
Sat Apr 8 07:03:46 UTC 2017


On Fri, Apr 07, 2017 at 08:12:42PM -0700, ????????? wrote:
> Hi all,
> 
> I found a Java process deadlock issue, and can be reproduced in FreeBSD
> 10.3 and 11.0 .
> 
> My environment:
> 
> * VirutalBox 5.1.16 r113841 on Mac OS X 10.12.4
> * FreeBSD-11.0-RELEASE-amd64.vhd.xz
> 
> Reproduction steps:
> 
> 1. install openjdk8
> 
> ```sh
> pkg install openjdk8
> ```
> 
> 2. Java source code
> 
> ```java
> public class Main {
>     public static void main(String[] args) {
>         while (true) {
>             System.out.println("tick");
>             Thread.sleep(3000);
>         }
>     }
> }
> ```
> 
> 3. Run java
> 
> ```sh
> $ javac Main.java
> $ java Main
> tick
> tick
> ...
> ```
> 
> 4. Turn down system date time.
> 
> ```sh
> $ date '+%Y-%m-%d %H:%M:%S'
> 20170408 11:09:11
> $ date 201001010000
> Fri Jan  1 00:00:00 CST 2010
> ```
> 
> Then, the java process will hung.
Hang != deadlock, why do you claim that the process deadlocked.
> 
> The issue will reproduce while turn "DOWN" the date time. It's OK while
> turn up the date time.

If JVM sets timeouts using absolute times than it might be fixed in latest
HEAD and stable/11.


More information about the freebsd-java mailing list