我实现了MyInputStream.read()并注意到一个InterruptedException可能发生在这个函数中。经过一番搜索,我发现捕获InterruptedException并重新抛出InterruptedIOException是很常见的,例如:try{...}catch(InterruptedExceptione){//Thread.currentThread().interrupt();//但只有大约50%的代码示例执行Thread.currentThread().interrupt()。嗯,同意theworstthingyoucandowithInterruptedE
两者都会导致程序停止执行。不过,很明显,这种情况的发生方式肯定存在一些差异。它们是什么? 最佳答案 总结thread.interrupt()不会停止线程。它用于多线程程序中的协调。除非您确切知道自己在做什么,否则不要使用它。抛出RuntimeException将(通常)终止线程,但不一定终止程序。System.exit(int)几乎总是终止程序并返回状态码。在不寻常的情况下,System.exit(int)可能不会真正停止程序。另一方面,Runtime.getRuntime().halt(int)总是这样。线程中断恐怕你的第一句话是
我对Thread.yield()的使用有点困惑Java中的方法,特别是在下面的示例代码中。我还读到yield()是“用来阻止线程执行的”。我的问题是:我相信下面的代码在使用yield()和不使用它时都会产生相同的输出。这是正确的吗?其实yield()的主要用途是什么?yield()与join()和interrupt()方法有何不同?代码示例:publicclassMyRunnableimplementsRunnable{publicstaticvoidmain(String[]args){Threadt=newThread(newMyRunnable());t.start();for(
这就是我正在做的--我有一个每分钟打印出信息的ruby脚本。我还为陷阱设置了一个过程,这样当用户按下ctrl-c时,过程就会中止。代码看起来像这样:switch=trueSignal.trap("SIGINT")doswitch=falseendlastTime=Time.nowwhileswitchdoifTime.now.min>lastTime.minthenputs"Aminutehasgoneby!"endend现在代码本身是有效的并且运行良好,但是它做了很多无用的工作,尽可能频繁地检查switch的值。它会尽可能多地使用处理器(至少一个内核的100%),因此非常浪费。我
我读了又读JavaConcurrencyinPractice,我读了几个关于这个主题的线程,我读了IBM文章DealingwithInterruptedException但是有一些我根本没有理解的东西,我认为可以分为两个问题:如果我自己从不中断其他线程,那么什么会触发InterruptedException?如果我自己从来没有使用interrupt()中断其他线程(比如说因为我正在使用其他方式来取消我的工作线程,例如毒丸和while(!cancelled)样式循环[正如JCIP中所解释的]),那么InterruptedException是什么意思?抓到一只我该怎么办?关闭我的应用程序?
我读了又读JavaConcurrencyinPractice,我读了几个关于这个主题的线程,我读了IBM文章DealingwithInterruptedException但是有一些我根本没有理解的东西,我认为可以分为两个问题:如果我自己从不中断其他线程,那么什么会触发InterruptedException?如果我自己从来没有使用interrupt()中断其他线程(比如说因为我正在使用其他方式来取消我的工作线程,例如毒丸和while(!cancelled)样式循环[正如JCIP中所解释的]),那么InterruptedException是什么意思?抓到一只我该怎么办?关闭我的应用程序?
Java的Thread.sleep什么时候抛出InterruptedException?忽略它是否安全?我没有做任何多线程。我只想等待几秒钟再重试一些操作。 最佳答案 您通常不应忽略该异常。请看以下论文:Don'tswallowinterruptsSometimesthrowingInterruptedExceptionisnotanoption,suchaswhenataskdefinedbyRunnablecallsaninterruptiblemethod.Inthiscase,youcan'trethrowInterrupt
Java的Thread.sleep什么时候抛出InterruptedException?忽略它是否安全?我没有做任何多线程。我只想等待几秒钟再重试一些操作。 最佳答案 您通常不应忽略该异常。请看以下论文:Don'tswallowinterruptsSometimesthrowingInterruptedExceptionisnotanoption,suchaswhenataskdefinedbyRunnablecallsaninterruptiblemethod.Inthiscase,youcan'trethrowInterrupt
为什么要在catchblock中调用Thread.currentThread.interrupt()方法? 最佳答案 这样做是为了保持状态。当您捕获InterruptedException并将其吞下时,您基本上可以防止任何更高级别的方法/线程组注意到中断。这可能会导致问题。通过调用Thread.currentThread().interrupt(),你设置了线程的中断标志,所以更高级别的中断处理程序会注意到它并可以适本地处理它。JavaConcurrencyinPractice在第7.1.3章:响应中断中更详细地讨论了这一点。它的规
为什么要在catchblock中调用Thread.currentThread.interrupt()方法? 最佳答案 这样做是为了保持状态。当您捕获InterruptedException并将其吞下时,您基本上可以防止任何更高级别的方法/线程组注意到中断。这可能会导致问题。通过调用Thread.currentThread().interrupt(),你设置了线程的中断标志,所以更高级别的中断处理程序会注意到它并可以适本地处理它。JavaConcurrencyinPractice在第7.1.3章:响应中断中更详细地讨论了这一点。它的规