private DefaultFuture(Channel channel, Request request, int timeout) {
        this.channel = channel;
        this.request = request;
        this.id = request.getId();
        this.timeout = timeout > 0 ? timeout : channel.getUrl().getPositiveParameter(TIMEOUT_KEY, DEFAULT_TIMEOUT);
        // put into waiting map.
        FUTURES.put(id, this);
        CHANNELS.put(id, channel);
    }
@Test
    @Disabled
    public void timeoutNotSend() throws Exception {
        final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        System.out.println(
                "before a future is create , time is : " + LocalDateTime.now().format(formatter));
        // timeout after 5 seconds.
        DefaultFuture f = defaultFuture(5000);
        while (!f.isDone()) {
            // spin
            Thread.sleep(100);
        }
        System.out.println(
                "after a future is timeout , time is : " + LocalDateTime.now().format(formatter));

        // get operate will throw a timeout exception, because the future is timeout.
        try {
            f.get();
        } catch (Exception e) {
            Assertions.assertTrue(
                    e.getCause() instanceof TimeoutException, "catch exception is not timeout exception!");
            System.out.println(e.getMessage());
        }
    }