Java 线程在 运行() 中使用 'return;'

Java Thread use 'return;' in run()

我想使用 'return;' 在条件为真时结束线程的执行。会发生什么坏事?

这只是为了更好理解的示例。在我的代码中有几十个检查这个条件并且对我来说看起来非常无序(如果在其他情况下......)。

我还是想执行finally块

public class Method implements Runnable{

@Override
public void run() {

    try {

        if(condition) { return; }

        System.out.println("b");

    }finally {

        System.out.println("a");

    }

}

或者 if-else 更好?

public class Method implements Runnable{

@Override
public void run() {

    try {

        if(!condition) { 

            System.out.prinln("b");

        }else{ //nothing }

    }finally {

        System.out.println("a");

    }

}

What bad can happen?

如果您在 run() 方法中 return; 就不会发生任何问题。

您的 run() 方法的两个版本在功能上是等效的;即他们做同样的事情。

并且 finally class 将始终在这两种情况下执行 1。就像这不是 run() 方法一样。

两个版本之间的唯一区别是风格。使用认为最易读的版本在您的真实代码中。 (我认为没有人可以根据这个高度人为的例子给你建议。)


1 - ...除非有人/某事杀死了 JVM 进程,拔掉了电源插头,等等。

真正的答案是:如果您担心 可读性,那么您的问题不是 return 与 if-else.

那么你的问题就在这里:

In my code are dozens of checking this condition

这很可能意味着您的线程正在处理许多 事情。导致混乱,不可读的代码。

当然,乍一看,这意味着你肯定想要

if (whatever) {
  return;
}

if (somethingElse) {
  return;
}

而不是使用 if/else 添加缩进层 if/else ...

但如前所述:真正的答案是退后一步,全面了解并找到以最易读的方式解决 "big picture problem" 的方法。很可能,您当前的方法不会让您到达那里。差远了。相反,您应该考虑将代码分割成许多更小的方法(使用好名字),并以有意义的方式组织它们。