首页 > 解决方案 > 空的while循环是否被认为是不好的做法?

问题描述

我要从服务器下载数据,如果下载失败,最多尝试 3 次。

public class DownloadFile {

    private boolean isSuccessful;

    public DownloadFile() {
        int attempt = 0;

        while(!isSuccessful && (attempt++ < 3)) {
            DownloadFileThread.start();
            while (DownloadFileThread.isAlive());
        }
    }

    private Thread DownloadFileThread = new Thread() {
        public void run() {
            try {
                // download file from server

                isSuccessful = true;
            } catch (Exception e) {
                isSuccessful = false;
            }
        }
    }

}

正如您在上面的示例中看到的那样,我while在第 10 行(将是什么)中有一个空循环,以强制保证在再次检查循环中的条件之前isSuccessful根据结果分配一个值。DownloadFileThreadwhile

做这样的事情被认为是不好的做法吗?有没有更好的方法或正确的方法来做到这一点?

虽然上面的代码确实产生了一个有效的结果,但我并不为我编写的代码感到自豪......

标签: javathread-safety

解决方案


是的,在这种情况下,这是一种不好的做法,因为 Java 提供了更好的机制来等待线程完成:Thread.join(),或者考虑使用更现代的功能,例如允许您等待任务完成的CompletableFuture或。ExecutorService

使用空循环等待会不必要地消耗大量 CPU 资源,这可能意味着系统上的其他任务执行速度会比其他任务慢。


推荐阅读