title: Redisson not shutting down keeps Java VM open
body: <p>I have the following simple code: </p>
  
  <pre><code>RedissonClient redisson = Redisson.create();
  
  RMap&lt;Object, Object&gt; mymap = redisson.getMap("mymap");
  mymap.put("field1", "value1");
  mymap.put("field1", "value2");
  
  redisson.shutdown();
  
  logger.info("Here but JVM still runs after this line");
  </code></pre>
  
  <p>And the output is:</p>
  
  <pre><code>2018-02-01 15:24:14 INFO  Version:41 - Redisson 3.6.0
  2018-02-01 15:24:14 INFO  MasterPubSubConnectionPool:144 - 1 connections initialized for /127.0.0.1:6379
  2018-02-01 15:24:14 INFO  MasterConnectionPool:144 - 10 connections initialized for /127.0.0.1:6379
  2018-02-01 15:24:17 INFO  RedisTest:21 - Here but JVM still runs after this line
  </code></pre>
  
  <p>What is other than shutdown needed for graceful shutdown? I got a thread dump and see the following non-daemon thread:</p>
  
  <pre><code>"ObjectCleanerThread" #13 prio=1 os_prio=31 tid=0x00007f885a05e800 nid=0xa803 in Object.wait() [0x00007000092cf000]
     java.lang.Thread.State: TIMED_WAITING (on object monitor)
      at java.lang.Object.wait(Native Method)
      - waiting on &lt;0x000000076ab108b0&gt; (a java.lang.ref.ReferenceQueue$Lock)
      at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
      - locked &lt;0x000000076ab108b0&gt; (a java.lang.ref.ReferenceQueue$Lock)
      at io.netty.util.internal.ObjectCleaner$1.run(ObjectCleaner.java:52)
      at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
      at java.lang.Thread.run(Thread.java:748)
  </code></pre>