我在Java中有一个线程
t.interrupt();
使t(一个不同的线程)被中断。我希望“
t”线程能够捕获到一个,InterruptedException
但是Eclipse不允许我InterruptedException
说它没有放在try主体中。我该如何InterruptedException
打电话?我使用t.interrupt()
错了吗?
尽管其他答案是正确的,但更充分的解释是适当的。
线程只能在其执行的特定点安全地中断(一般而言)。特别是,它可以在发出wait()
呼叫或调用可以发出的服务时安全地中断wait()
。这就是为什么InterruptedException
是检查异常而不是运行时(未检查)异常的原因。允许在任何时候任意中断线程将使执行不确定(至少是指定JVM的方式)。有一种Thread#stop()
方法被强烈建议不要使用,因为它引起的问题多于解决的问题。从Javadoc
这种方法本质上是不安全的。使用Thread.stop停止线程会导致它解锁所有已锁定的监视器(由于未经检查的ThreadDeath异常会自然传播堆栈)。如果先前由这些监视器保护的任何对象处于不一致状态,则损坏的对象将变为其他线程可见,从而可能导致任意行为。stop的许多用法应由仅修改某些变量以指示目标线程应停止运行的代码代替。目标线程应定期检查此变量,如果该变量指示要停止运行,则应有序地从其运行方法返回。如果目标线程等待很长时间(例如,在条件变量上),则应使用中断方法来中断等待。为什么不赞成使用Thread.stop,Thread.suspend和Thread.resume?。
如果需要中断正在运行的线程,则必须使用Thread.interrupted()
或.isInterrupted()
或轮询共享变量来定期轮询中断状态,并自己采取适当的措施。
注意:上面的术语“中断”(作为方法名的一部分除外)是一般意义上的,而不是call的特定含义Thread#interrupt()
。
public boolean allPairsFound(){
问题内容: 我刚刚在Windows Vista上安装了JDK。之后,我为4个环境变量设置了适当的值:classpath,include,lib,path。之后,我可以编译我的HelloWorld程序(我得到了* .class文件)。但是,当我尝试执行已编译的程序(我键入java HelloWorldApp)时,它不起作用。Java写了很多东西,最后写成“找不到主类:HelloWorldApp”。请
我见过很多类似的问题,但它们通常与我的问题无关。 嗯,我只能找到一个官方澄清,它说“最强匹配规则获胜”--但这似乎不像我的情况那样普遍适用。此外,出于某种原因,它们过于特定:它们说no-rollback-for=“InstrumentNotFoundException”字面意思是,“InstrumentNotFoundException以外的任何异常”都将被回滚(但是InstrumentNotFo
我想检查一个数字是二进制还是十进制,但从1到n都不行。例如,从1到10我们有两个十进制数字,其中包含0,1。我如何更改它?