Java线程使用';返回';在逃

Java线程使用';返回';在逃,java,java-threads,Java,Java Threads,我想使用“return;”如果条件为真,则完成线程的执行。会发生什么坏事 这只是一个更好理解的例子。在我的代码中有几十个检查这个条件,对我来说看起来非常无序(如果在其他if…) 我仍然想执行最后一个块 public class Method implements Runnable{ @Override public void run() { try { if(condition) { return; } System.out.println("b"

我想使用“return;”如果条件为真,则完成线程的执行。会发生什么坏事

这只是一个更好理解的例子。在我的代码中有几十个检查这个条件,对我来说看起来非常无序(如果在其他if…)

我仍然想执行最后一个块

public class Method implements Runnable{

@Override
public void run() {

    try {

        if(condition) { return; }

        System.out.println("b");

    }finally {

        System.out.println("a");

    }

}
或者,如果不是这样,情况会更好吗

public class Method implements Runnable{

@Override
public void run() {

    try {

        if(!condition) { 

            System.out.prinln("b");

        }else{ //nothing }

    }finally {

        System.out.println("a");

    }

}
会发生什么坏事

如果您
返回,则不会发生任何不好的情况
run()方法中

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

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

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


1-。。。除非有人/物杀死JVM进程,拔出电源插头,等等

会发生什么坏事

如果您
返回,则不会发生任何不好的情况
run()方法中

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

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

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



1-。。。除非有人/物杀死JVM进程,拔出电源插头,等等。

这里真正的答案是:如果你担心可读性,那么你的问题不是返回,而不是其他

那么你的问题就在这里:

在我的代码中,有很多人在检查这种情况

这很可能意味着你的线程正在做很多事情。导致代码杂乱无章,无法阅读

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

if (whatever) {
  return;
}

if (somethingElse) {
  return;
}
而不是使用if/else if/else添加缩进层


但正如所说的:这里的真正答案是后退一步,了解完整的情况,并找到以最易读的方式解决“大问题”的方法。最有可能的是,你目前的方法无法实现这一目标。甚至不接近。相反,您应该研究用许多较小的方法(有好的名称)来分割代码,并以有意义的方式组织这些方法。

这里真正的答案是:如果您担心可读性,那么您的问题不是返回,而不是其他

那么你的问题就在这里:

在我的代码中,有很多人在检查这种情况

这很可能意味着你的线程正在做很多事情。导致代码杂乱无章,无法阅读

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

if (whatever) {
  return;
}

if (somethingElse) {
  return;
}
而不是使用if/else if/else添加缩进层


但正如所说的:这里的真正答案是后退一步,了解完整的情况,并找到以最易读的方式解决“大问题”的方法。最有可能的是,你目前的方法无法实现这一目标。甚至不接近。相反,你应该考虑用许多较小的方法(有好的名称)来分割代码,并以有意义的方式组织这些方法。

无论哪种情况,线程都会结束,而
try
块的契约最终总是会执行,所以你通常不必担心这种情况不会发生。在不了解你的用例的情况下,没有什么会反对你的第一种方法。非常好,
finally
在大多数(~all)情况下也会被调用。无论哪种情况,线程都会结束,
try
块的契约总是会执行,
finally
所以您通常不必担心这种情况不会发生。在不知道您的用例的情况下,没有什么可以反对你的第一种方法。非常好,而且在大多数(~all)情况下,
最终也会被调用。