Tag: 中断exception

为什么在可调用中设置中断位

因此,该资源( http://www.ibm.com/developerworks/java/library/j-jtp05236/index.html )建议在线程不处理中断本身时设置线程中的中断位,“ 这样,调用堆栈上方的代码可以了解中断并在需要时响应它 。“ 假设我正在使用ExecutorService在不同的Thread中运行某些东西。 我构造一个Callable并将此Callable传递给ExecutorService.submit(),它返回一个Future。 如果Callable被中断然后重置中断位,则在调用Future.get()时,关联的Future不会抛出InterruptedException。 那么,如果此Future是主线程访问生成的线程的唯一方式,那么在Callable中设置被中断位的目的是什么呢? class MyCallable implements Callable { @Override public String call() { while (!Thread.currentThread().isInterrupted()) { } Thread.currentThread().interrupt(); return “blah”; } } ExecutorService pool = makeService(); Future future = pool.submit(new MyCallable()); // Callable gets interrupted and the Callable resets the interrupt bit. future.get(); // Does not thrown an InterruptedException, […]

读取套接字时的Java中断线程

可能重复: 如何立即终止套接字IO操作的线程阻塞? 我有客户端在线程中运行想要从Java中读取套接字。 但是在阅读时,也许我想要杀死这个主题。 所以我interrupt它,但socket的读取方法是否会抛出InterruptedException ? 我没找到。 那么,如果在读取套接字时阻塞线程,我怎么能很好地要求线程死掉? 谢谢

谁打断了我的线程?

我理解InterruptedException的作用以及它被抛出的原因。 但是在我的应用程序中,我在等待我的应用程序只知道的线程上的SwingUtilities.invokeAndWait()时得到它,而我的应用程序从不在任何线程上调用Thread.interrupt() ,它也从不传递线程的引用对任何人。 所以我的问题是:谁打断了我的线程? 有什么方法可以说出来吗? 有没有理由说InterruptedException不包含请求中断的Thread的名称? 我读到它可能是一个框架或库来执行此操作,我们使用以下内容,但我无法想到它们中断我的线程的原因: 过冬 弹簧 Log4J的 Mysql连接器

InterruptedException:是什么原因造成的?

关于Java的InterruptedException有一些有趣的问题和答案,例如Java中的InterruptedException和处理InterruptedException 的原因 。 但是,它们都没有告诉我InterruptedException的可能来源。 那些OS信号如SIGTERM,SIGQUIT,SIGINT? 在命令行上按CTRL-C会产生InterruptedException吗? 还有什么?

在Thread.join()之前调用Thread.interrupt()会导致join()立即抛出InterruptedException吗?

基本上,问题标题是什么。 Thread t = new Thread(someRunnable); t.start(); t.interrupt(); t.join(); //does an InterruptedException get thrown immediately here? 从我自己的测试来看,似乎,但只是想确定。 我猜测Thread.join()在执行“等待”例程之前检查线程的interrupted状态?

为什么要捕获InterruptedException来调用Thread.currentThread.interrupt()?

在Effective Java(第275页)中,有以下代码段: … for (int i = 0; i < concurrency; i++) { executor.execute(new Runnable() { public void run() { ready.countDown(); try { start.await(); action.run(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } finally { done.countDown(); } } } … 捕获被中断的exception只是为了重新提升它有什么用? 为什么不让它飞?

退出Swing应用程序时偶尔会出现InterruptedException

我最近将我的计算机更新为更强大的计算机,配备了四核超线程处理器(i7),因此可以提供大量真正的并发性。 现在我在退出( System.exit(0) )我正在开发的应用程序(使用Swing GUI)时偶尔会出现以下错误: Exception while removing reference: java.lang.InterruptedException java.lang.InterruptedException at java.lang.Object.wait(Native Method) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134) at sun.java2d.Disposer.run(Disposer.java:125) at java.lang.Thread.run(Thread.java:619) 好吧,鉴于它开始发生在具有更多并发能力的硬件上,并且它与线程有关,并且它偶尔发生,它显然是某种时间性的东西。 但问题是堆栈跟踪太短了。 我只有上面的列表。 它根本不包含我自己的代码,因此有点难以猜测bug的位置。 以前有没有经历过这样的事情? 任何想法如何开始解决它? 编辑:因为退出使用System.exit(0)的Swing应用程序可能是“不干净”,但我不想将主框架设置为EXIT_ON_CLOSE因为我想确保在应用程序退出时没有任何关键问题,我添加了一个机制,以便在调用System.exit(0)之前执行主框架的dispose()方法。 所以它现在应该很干净,但偶尔也会发生exception。 它发生在调用System.exit(0)之后; dispose()没有问题。 也就是说,它必须来自一个关闭钩子: mainFrame.dispose(); // No problem! After this returns, all visible GUI is gone. // In fact, if there were no other threads around, […]