java - 空的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
根据结果分配一个值。DownloadFileThread
while
做这样的事情被认为是不好的做法吗?有没有更好的方法或正确的方法来做到这一点?
虽然上面的代码确实产生了一个有效的结果,但我并不为我编写的代码感到自豪......
解决方案
是的,在这种情况下,这是一种不好的做法,因为 Java 提供了更好的机制来等待线程完成:Thread.join()
,或者考虑使用更现代的功能,例如允许您等待任务完成的CompletableFuture
或。ExecutorService
使用空循环等待会不必要地消耗大量 CPU 资源,这可能意味着系统上的其他任务执行速度会比其他任务慢。
推荐阅读
- javascript - Web 应用程序无法在 Edge 浏览器 41 上运行
- ios - UIViewController 中的默认视图收到警告,因为找不到插座
- ajax - 将数据从视图传输到控制器时缺少 .h
- performance - 有没有办法识别或检测 Hive 表中的数据倾斜?
- wpf - 以编程方式使用 wpf 在数据网格中添加用户控件时出现问题
- android - 如何在 Android CardView 中放大和缩小布局
- java - 使用 gradle 测试任务执行测试时无法在 Intellij 中远程调试测试
- visual-studio-2017 - VS 2017 连接服务 Office 365 API 不可用
- java - 无法在硒测试中调用自定义注释
- c - 使用 MPI (C) 发送和接收 3D 矩阵