- [x] I have searched the [issues](https://github.com/apache/incubator-dubbo/issues) of this repository and believe that this is not a duplicate.
- [x] I have checked the [FAQ](https://github.com/apache/incubator-dubbo/blob/master/FAQ.md) of this repository and believe that this is not a duplicate.

### Environment

* Dubbo version: 2.7.0
* Operating System version: mac
* Java version: 1.8

### Steps to reproduce this issue

1.  `AbstractClient#initConnectStatusCheckCommand` set break point at `  !isConnected()`.
2. `AbstractClient#close()` set break point here.    
3.  start client first, start provider and then shutdown provider gracefully , let method `AbstractClient.close()` be executed. Then select step `1` and trigger the thread to execute `!isConnected`, here will always try to connect the offline machine.

Pls. provide [GitHub address] to reproduce this issue.

### Expected Result

What do you expected from the above steps？

When the server goes offline, the client will not reconnect the offline machine.

### Actual Result

What actually happens?

The client reconnects the offline machine every 2 seconds and causes a large number of arp packets(because ip is recycled and not available now).
private final Lock connectLock = new ReentrantLock();
    private final boolean send_reconnect;
    private final AtomicInteger reconnect_count = new AtomicInteger(0);
    
    private final AtomicBoolean reconnect_error_log_flag = new AtomicBoolean(false);
    
    private final int reconnect_warning_period;
    private final long shutdown_timeout;
    protected volatile ExecutorService executor;
    private volatile ScheduledFuture<?> reconnectExecutorFuture = null;
    
    private long lastConnectedTime = System.currentTimeMillis();
    public AbstractClient(URL url, ChannelHandler handler) throws RemotingException {
        super(url, handler);
        send_reconnect = url.getParameter(Constants.SEND_RECONNECT_KEY, false);
        shutdown_timeout = url.getParameter(Constants.SHUTDOWN_TIMEOUT_KEY, Constants.DEFAULT_SHUTDOWN_TIMEOUT);
        
        reconnect_warning_period = url.getParameter("reconnect.waring.period", 1800);
        try {
            doOpen();
        } catch (Throwable t) {
            close();
            throw new RemotingException(url.toInetSocketAddress(), null,
                    "Failed to start " + getClass().getSimpleName() + " " + NetUtils.getLocalAddress()
                            + " connect to the server " + getRemoteAddress() + ", cause: " + t.getMessage(), t);
        }
        try {
            
            connect();
            if (logger.isInfoEnabled()) {