Java fügt einem bestimmten Codeabschnitt ein Timeout-Limit hinzu

1. Anforderungsszenario: Bei der Anforderung von SFTP zum Abrufen von Dateien in diesem Projekt kann die Verbindung manchmal aus verschiedenen Gründen nicht hergestellt werden, was zu einer Zeitüberschreitung führt. Die Schnittstelle wartet jedoch lange auf eine Timeout-Ausnahme. Wir müssen die Ausnahme innerhalb eines benutzerdefinierten Zeitbereichs zurückgeben.

    private byte[] getSftpFile(String path){
        ExecutorService exec = Executors.newFixedThreadPool(1);
        Callable<byte[]> call = new Callable<byte[]>() {
            @Override
            public byte[] call() throws Exception {
                //具体业务代码
                return getByteFile(path);
            }
        };
        try {
            Future<byte[]> future = exec.submit(call);
            byte[] ret = future.get(10000 * 1, TimeUnit.MILLISECONDS); // 任务处理超时时间设为 10 秒
            return ret;
        } catch (TimeoutException e) {
            e.printStackTrace();
            throw new CommonException("sftp服务器异常!");
        } catch (Exception e) {
            e.printStackTrace();
            throw new CommonException("sftp服务器异常!");
        } finally {
            exec.shutdown();
        }
    }

おすすめ

転載: blog.csdn.net/weixin_40841731/article/details/131090314