我了解到try catch语句的finally子句始终执行。但是有人对我说,有可能避免执行它(删除它不是一种选择)。
-有人怎么可能?
-我也很好奇知道为什么有人要避免执行它?
使用该finally
块中未捕获的异常将其杀死,或者将整个JVM杀死(这将杀死线程)。
finally
除了不良的设计外,没有充分的理由停止执行块。如果不应该每次都运行它,则不要将其放在一个finally
块中。
使用下面的测试代码,我运行了两种不同的情况,以了解杀死时会发生什么Thread
:
Thread
和sleep
主线程2秒钟。在内Thread
,几乎立即进入该finally
块,然后睡眠5秒钟。一旦主线程完成等待,终止Thread
使用stop
。Thread
并睡眠2秒钟。内Thread
,睡眠5秒进入前finally
块,然后睡一些内finally
给它被杀死的机会。在第一种情况下,结果是该finally
块停止执行。在第二种情况下,其结果是,该finally
块完全执行,并且在Thread
这是stop
PED不会少。
输出(注意为所有输出添加的当前线程的名称):
thread-starting [main]
trying [Thread-0]
catching [Thread-0]
finally-sleeping [Thread-0]
thread-stopped [main]
[main]
thread-starting [main]
trying-sleeping [Thread-1]
thread-stopped [main]
finally-sleeping [Thread-1]
finally-done [Thread-1]
码:
public class Main
{
public static void main(String[] args)
{
testThread(new TestRunnable());
println("");
testThread(new TestRunnable2());
}
private static void testThread(Runnable runnable)
{
Thread testFinally = new Thread(runnable);
println("thread-starting");
testFinally.start();
try
{
Thread.sleep(2000);
}
catch (InterruptedException e)
{
println("main-interrupted...");
}
testFinally.stop();
println("thread-stopped");
}
private static class TestRunnable implements Runnable
{
@Override
public void run()
{
try
{
println("trying");
throw new IllegalStateException("catching");
}
catch (RuntimeException e)
{
println(e.getMessage());
}
finally
{
println("finally-sleeping");
try
{
Thread.sleep(5000);
}
catch (InterruptedException e)
{
println("finally-interrupted");
}
println("finally-done");
}
}
}
private static class TestRunnable2 implements Runnable
{
@Override
public void run()
{
try
{
println("trying-sleeping");
Thread.sleep(5000);
}
catch (InterruptedException e)
{
println("trying-interrupted");
}
finally
{
println("finally-sleeping");
try
{
Thread.sleep(5000);
}
catch (InterruptedException e)
{
println("finally-interrupted");
}
println("finally-done");
}
}
}
private static void println(String line)
{
System.out.printf("%s [%s]%n", line, Thread.currentThread().getName());
System.out.flush();
}
}
在传递给的方法的lambda中,我验证是否使用预期值调用了方法: 由于方法抛出一个,我被迫在lambda内部的调用周围添加一个无用的try/catch块。这是不必要的冗长。 我怎么能避免呢?
本文向大家介绍Shell脚本避免重复执行的方法,包括了Shell脚本避免重复执行的方法的使用技巧和注意事项,需要的朋友参考一下 很多用cron定时执行的shell脚本可能会由于各种原因执行很久,会有必要在运行的时候先检查一下自身是否还在运行。本文提供的linux shell脚本用以检查以命令sh ...来执行的shell脚本。要对其他东西进行唯一性检查,可以稍微修改一下源代码。
问题内容: 我希望能够以这种方式一个接一个地获取句子的POS标签: 但是问题是每个句子大约需要一秒钟。还有另一种选择可用于批量执行此操作并加快处理速度。但是,如果我能逐句地做这件事,我的生活会更轻松。 有没有办法更快地做到这一点? 问题答案: 对于NLTK 3.1版,里面,是这样定义的: 因此,每次对first的调用实例化都会花费一些时间,因为它涉及加载pickle文件。 只需调用when是。因此
材料设计非常强调“纸张”的隐喻。要做到这一点,阴影是必不可少的。由于材料设计是一种理念,而不是API(尽管它内置在L中),因此应该在任何地方(Windows窗体、HTML/CSS等)进行设计。如何在Android API 14到20中做到这一点? 请注意,对于圆形和其他非方形形状,预制PNG实际上并不实用。
问题内容: 这是我要执行的一些代码。我想等待AJAX响应,以便可以从服务器返回一些信息。有什么办法可以做到这一点? 问题答案: 很高兴在这里读到。 这实际上不是“同步的”,但我认为它可以达到OP的预期。 旧的(自此之后,jQuery的选项已被弃用): 所有Ajax调用都可以异步(使用回调函数,这是在“成功”键之后指定的函数)或同步完成-有效地阻止并等待服务器应答。要获得同步执行,您必须指定 就
我正在处理一个大型医学数据集,我想看看是否有一些行对应于同一个患者。与患者 ID 对应的列是 。 我想创建一个新列,如果该患者出现在多行中,它将是“是”,如果它只出现一次,它将 这是我做的代码: 但是这个操作太花时间了。有什么方法可以做得更快吗?