返回

代码review,瑞出事来了!

后端

代码review,瑞出事来了!

不久之前,部门进行了一次代码评审。代码整体比较简单,该吹B的地方都已经吹过了,无非是些if else的老问题而已。当翻到一段定时任务的一步执行代码时,我的双眼一亮,觉得该BB两句了。谁知这群家伙,还一个个想找借口搪塞过去,我当即拍桌而起,大呼“瑞出事来了!”

原来,这段定时任务的执行代码是这样的:

public class MyTimerTask extends TimerTask {

    private int count = 0;

    @Override
    public void run() {
        count++;
        System.out.println("定时任务执行了" + count + "次");
    }
}

乍一看,这段代码似乎没什么问题,不就是每隔一段时间执行一次任务吗?但是,如果你仔细观察,就会发现一个问题:这个任务是永远不会结束的!

这是因为,这段代码中没有对count变量进行任何限制。也就是说,count变量会一直增加下去,直到溢出。一旦count变量溢出,就会变成一个负数,然后任务就会重新开始执行。

这样的后果是,这个定时任务会一直执行下去,直到程序崩溃。这显然不是我们想要的结果。

为了解决这个问题,我们需要对count变量进行限制。我们可以通过以下方式来实现:

public class MyTimerTask extends TimerTask {

    private int count = 0;

    @Override
    public void run() {
        if (count < 10) {
            count++;
            System.out.println("定时任务执行了" + count + "次");
        } else {
            cancel();
        }
    }
}

这样,定时任务就会在执行了10次之后自动取消。

除了这个显而易见的问题之外,这段代码中还存在一些其他问题。例如,这段代码没有对System.out.println()方法进行任何异常处理。如果System.out.println()方法抛出异常,程序就会崩溃。

为了解决这个问题,我们可以通过以下方式来实现:

public class MyTimerTask extends TimerTask {

    private int count = 0;

    @Override
    public void run() {
        try {
            if (count < 10) {
                count++;
                System.out.println("定时任务执行了" + count + "次");
            } else {
                cancel();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

这样,即使System.out.println()方法抛出异常,程序也不会崩溃。

以上只是代码review中需要注意的一些常见问题。在实际工作中,我们可能会遇到各种各样的问题。因此,在进行代码review时,我们需要仔细观察,发现问题并及时解决。

通过代码review,我们可以发现和修复代码中的错误,提高代码质量,降低软件开发成本。因此,代码review是一种非常重要的软件开发实践,我们应该养成定期进行代码review的习惯。