蓝桥杯里面的测试用例是啥
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯里面的测试用例是啥相关的知识,希望对你有一定的参考价值。
参考技术A 蓝桥杯测试用例一般包括:输入样例、输出样例、输入输出范围、特殊情况测试等。使Java方法不可中断的用例是啥
【中文标题】使Java方法不可中断的用例是啥【英文标题】:What are use cases of making Java method UnInterruptible使Java方法不可中断的用例是什么 【发布时间】:2021-07-24 18:45:45 【问题描述】:我正在阅读 Google Guava RateLimiter。 acquire 方法将在等待新许可时将线程置于 uninterruptible uninterruptible 睡眠。中断异常
不间断睡眠并没有完全忽略 InterruptedException。但是只要抓住它,记住它已经被中断了,然后继续睡眠直到达到超时。它最终会很好地将中断标志设置回线程。
列表项
这可以防止调用者通过中断来取消等待。它可能有什么好处?是不是因为方法没有强制调用者处理InterruptedException? 还有哪些其他用例我们可能希望使用相同的不间断代码模式?编辑: 我刚刚意识到我将它链接到了错误的方法。
public static boolean awaitUninterruptibly(Condition condition, long timeout, TimeUnit unit)
正确的方法是 sleepUninterruptibly。
public static void sleepUninterruptibly(long sleepFor, TimeUnit unit)
boolean interrupted = false;
try
long remainingNanos = unit.toNanos(sleepFor);
long end = System.nanoTime() + remainingNanos;
while (true)
try
// TimeUnit.sleep() treats negative timeouts just like zero.
NANOSECONDS.sleep(remainingNanos);
return;
catch (InterruptedException e)
interrupted = true;
remainingNanos = end - System.nanoTime();
finally
if (interrupted)
Thread.currentThread().interrupt();
【问题讨论】:
“只是因为该方法没有强制调用者处理 InterruptedException” - 调用者不会收到InterruptedException
。他们可以通过isInterrupted
检查发生了什么,但他们不会得到那个异常。奇怪的是,这个方法返回一个布尔值,而同样的状态可以简单地用isInterrupted
方法检查。可能这只是一种强制执行,因此调用者必须考虑结果,就像 Optional
是方法的返回类型而不是 null
是的,我就是这么想的。我可以看到不传播InterruptedException
的唯一好处是调用者不需要考虑如何处理异常。但我不知道是否值得拒绝调用者通过中断等待来取消等待。
【参考方案1】:
是不是因为方法没有强制调用者处理InterruptedException
来电者不会收到InterruptedException
。 Thread.currentThread().interrupt();
只设置一个内部标志,它不会抛出 InterruptedException
。
可能存在(我不知道真实情况)在不被打断的情况下等待是有意义的情况。我确实知道由于“虚假中断”而可能发生的理论上的中断,即:没有真正原因的中断直接取决于您的代码,如 here 所记录的那样:
在等待条件时,通常允许发生“虚假唤醒”,作为对底层平台语义的让步。
【讨论】:
嗨,尤金,您的回复让我意识到我链接到了错误的代码。实际上是sleepUninterruptibly
。我相信线程睡眠不会受到虚假唤醒的影响。
@Devguli this 倾向于不同意你的观点。
我可以看到您的链接仅提及wait
的情况(如等待/通知)。我相信它不适用于Thread.sleep()
- ref以上是关于蓝桥杯里面的测试用例是啥的主要内容,如果未能解决你的问题,请参考以下文章