code: @Nonnull
      public static List<TtlRunnable> gets(@Nullable Collection<? extends Runnable> tasks, boolean releaseTtlValueReferenceAfterRun, boolean idempotent) {
          if (null == tasks) return Collections.emptyList();
  
          List<TtlRunnable> copy = new ArrayList<TtlRunnable>();
          for (Runnable task : tasks) {
              copy.add(TtlRunnable.get(task, releaseTtlValueReferenceAfterRun, idempotent));
          }
          return copy;
      }
docs: wrap input {@link Runnable} Collection to {@link TtlRunnable} Collection.
  
  @param tasks                            task to be wrapped. if input is {@code null}, return {@code null}.
  @param releaseTtlValueReferenceAfterRun release TTL value reference after run, avoid memory leak even if {@link TtlRunnable} is referred.
  @param idempotent                       is idempotent mode or not. if {@code true}, just return input {@link Runnable} when it's {@link TtlRunnable},
  otherwise throw {@link IllegalStateException}.
  <B><I>Caution</I></B>: {@code true} will cover up bugs! <b>DO NOT</b> set, only when you know why.
  @return wrapped tasks
  @throws IllegalStateException when input is {@link TtlRunnable} already and not idempotent.