中断异常与while循环中的isInterrupted对比
假设我有以下代码: while(!Thread.currentThread().isInterrupted()){ //do something Thread.sleep(5000); } 现在Thread.sleep投掷`interruptedException,所以应该像这样: while(!Thread.currentThread().isInterrupted()){ //do something try{ Thread.sleep(5000); } catch(InterruptedException e){ } } 如果我击中catch while循环会继续还是需要做Thread.currentThread().interrupt()?如果我确实称此方法,那也不会导致InterruptedException吗?否则,我首先如何获得例外? 也有: whil
0 2023-12-03
编程技术问答社区
如果没有人调用interrupt(),是否可以忽略InterruptedException?
如果我创建自己的线程(即不是线程池),而我呼叫sleep或任何其他可中断的方法的某个地方,可以忽略InterruptedException 如果我知道代码中的其他人都在做一个中断在线程上. 换句话说,如果该线程应该在JVM时长,这意味着线程不容易中断,是否可以安全地假设InterruptedException将被调用永远不会被称为被吞下? 解决方案 忽略检查的例外永远不会安全. 目前,它可能对您来说是可以的,但是如果其他任何程序员使用您的代码/API,则它们应该期望标准行为: 这是,线程对中断呼叫的"反应",,但用"反应"来描述任何"反应". 我的意思是,这取决于线程的开发人员可以确定线程如何处理中断,而Java具有不是 任何预定的规则,但是您应该记录线程的"反应"(带有文档注释). 例如,InterruptedException仅是从阻止方法(例如Thread.sleep(...))中抛出的,但是从正常行的行为中 (这意味着默认情况下只忽略了中断) ,
4 2023-10-20
编程技术问答社区
传播线程中的系统调用中断
我正在运行两个python线程(import threading).他们俩都在open()呼叫上被阻止;实际上,他们试图打开命名的管道以写在其中,因此要阻止这是一种正常行为,直到有人试图从命名的管道上读取. 简而言之,看起来像: import threading def f(): open('pipe2', 'r') if __name__ == '__main__': t = threading.Thread(target=f) t.start() open('pipe1', 'r') 当我键入a ^c时,主线程中的open()被中断(rist IOError使用errno == 4). 我的问题是:t线程仍在等待,我想传播中断行为,以使其也提高IOError. 解决方案 我在Python文档中找到了这一点: " ...只有主线程可以设置一个新的信号处理程序,并且主线程将是唯一接收信号的线程(即使基础线程实现支持向单个
6 2023-10-13
编程技术问答社区
epoll_wait由于EINTR而失败,如何补救?
我的epoll_wait因eintr而失败.我的GDB跟踪显示了这一点: enter code here 221 in ../nptl/sysdeps/pthread/createthread.c (gdb) 224 in ../nptl/sysdeps/pthread/createthread.c (gdb) [New Thread 0x40988490 (LWP 3589)] 227 in ../nptl/sysdeps/pthread/createthread.c (gdb) epoll_wait error in start timer: Measurement will befor entire duration of execution epoll_wait: Interrupted system call [Thread 0x40988490 (LWP 3589) exited] 此字符串"启动计时器中的epoll_wait错误:
6 2023-10-13
编程技术问答社区
使用Filesystemview而无需其他摇摆组件
我感到沮丧,试图摆脱我的Java程序完成时显示的讨厌的例外: 删除参考时异常:java.lang.interruptedexception java.lang.interruptedException在java.lang.object.wait(本机 方法)at Java.lang.ref.referencequeue.remove(未知来源) java.lang.ref.referencequeue.remove(未知来源) sun.java2d.disposer.run(未知来源) java.lang.thread.run(未知来源) 我的困境的根源是使用 filesystemview 类.我的代码改编自代码,使用file.listroots(),然后使用fileSystemview显示我的Windows驱动器的友好名称/描述.该代码的简化版本可以正常运行,但会使守护程序线程运行引起问题,是: File[] roots = File.listRoots(); Fil
10 2023-10-11
编程技术问答社区
InterruptedException after cancel file open dialog-1.6.0_26
以下代码的输出是: java.vendor Sun Microsystems Inc. java.version 1.6.0_26 java.runtime.version 1.6.0_26-b03 sun.arch.data.model 32 os.name Windows XP os.version 5.1 os.arch x86 Input selection cancelled by user. Exception while removing reference: java.lang.InterruptedException java.lang.InterruptedException at java.lang.Object.wait(Native Method) at java.lang.ref.ReferenceQueue.remove(Unknown Source) at java.lang.re
2 2023-10-11
编程技术问答社区
谁打断了我的帖子?
我了解中断的exception的作用以及为什么要投掷.但是,在我的应用程序中,我在仅在我的应用程序中知道的线程上等待SwingUtilities.invokeAndWait()时会得到它,并且我的应用程序在任何线程上都从未调用Thread.interrupt(),也永远不会将线程的引用传递给任何人. 所以我的问题是:谁打断了我的线程? 有什么办法告诉吗?有原因为什么InterruptedException不包含请求中断的线程的名称? 我读到它可能是这样做的框架或库,我们使用以下内容,但是我想不出它们中断我的线程的原因: Hibernate 春天 log4j mySQL连接器 解决方案 如果可能的话,您可以扩展Thread并覆盖此线程打印stacktrace或抛出不支持的操作例外的方法. 您还可以使用扩展Thread类存储对中断线程的引用,并在捕获中断的异常后阅读它. 其他解决方案 通常,如果您想知道谁在做某事,请附上调试器,放断点,然后
8 2023-10-11
编程技术问答社区
读取套接字时的Java中断线程
可能的重复: 如何终止插座上的线程块立即? 我的client在线程中运行,想从Java的插座读取.但是在阅读时,也许我想杀死线程.所以我interrupt,但是Socket的阅读方法会抛出InterruptedException吗?我没有找到. 那么,我如何在读取插座上阻塞时,我该如何很好地要求线程死亡? 谢谢 解决方案 它已经回答了>如何立即终止插座io操作上的螺纹阻塞? 基本上,当您close()套接字时,所有关联的流将关闭,从而导致所有阻止的操作被封锁. 或者您可以致电Thread.interrupt(),它将中断阻止操作,从而使其投掷InterruptedException. 其他解决方案 Nio Channels具有
8 2023-09-06
编程技术问答社区
执行线程。如果线程已被中断,则会引发睡眠抛出?
给出了一个线程,该线程未被阻止时被中断(即没有抛出中断的exception),该线程后来尝试睡觉时会抛出一个中断的exception吗? InterruptedException-如果任何线程中断了当前线程.当抛出此例外时,清除当前线程的中断状态. 解决方案 是的,它确实如此. 文档在这一点上可能并不清楚,但这很容易测试(例如,请参见下面的答案),并查看规范(热点)实现. thread.sleep shells out to os:sleep,它在凝视睡眠过程之前先检查中断,因为您可以看到在这里(寻找os:sleep). 如果不是这种情况,则中断或多或少是不可能使用的.如果他们碰巧到达任何sleep()电话外,它们将会丢失,因为随后的sleep()呼叫会忽略它们.您甚至都无法重新拦截线程,因为它已经被中断. 其他解决方案 我发现没有说明这是强制性的文件,但我发现在我的系统(32位客户端VM 1.7)上,试图在设置中断的平面设置时试图睡觉 do 投掷.测试
12 2023-09-04
编程技术问答社区
Java和#39;s螺纹。睡眠引发中断异常?
java的螺纹何时会抛出interruptedException?忽略它安全吗?我没有做任何多线程.我只想等待几秒钟,然后重试操作. 解决方案 您通常不应该忽略异常.查看以下论文: 不要吞咽中断 有时投掷中断的exception是 不是一个选项,例如当可运行呼叫定义的任务时 可中断的方法.在这种情况下,您不能重新恢复 IntruptedException,但您也不想做任何事情.当一个 阻止方法检测中断并抛出中断exception, 它清除了中断的状态.如果您抓住了InterruptedException 但是不能重新责备它,您应该保留证据表明 中断发生,以使呼叫堆栈上的代码更高 了解中断并在此愿意的情况下做出回应.这个任务 通过将Interrupt()调用"重新中断"当前 线程,如列表3所示,至少每当您捕获时 IntruptedException,不要重新启动,重新中断电流 返回之前的线程. public class TaskRunner implements
6 2023-09-04
编程技术问答社区
当我的线程被中断时,我如何中断RestTemplate调用?
我需要制作一个我的同步和异步功能的库. executeSynchronous() - 等到我得到结果,返回结果. executeAsynchronous() - 如果需要,可以立即返回未来,可以在其他事情完成后处理. 我的库的核心逻辑 客户将使用我们的库,他们将通过通过DataKey构建器对象来称呼它.然后,我们将通过使用该DataKey对象构造URL,并通过执行http client call call to nut urol,然后在将响应恢复为JSON字符串之后,我们将将该JSON字符串发送给我们的客户,因为它是通过创建DataResponse对象.有些客户会致电executeSynchronous(),有些客户可能会拨打executeAsynchronous(),所以这就是为什么我需要在库中分别提供两种方法. 接口: public interface Client { // for synchronous public DataRe
10 2023-08-11
编程技术问答社区
在ThreadInterrupted的情况下提取进程的退出代码
我刚刚通过exec()调用创建了一个过程,现在我正在使用 它的.waitfor()方法.我需要抓住一个中断的感受,但我是 不知道我应该放在捕获代码块中. 我想收到退出代码,但是如果当前线程我不会 被打断了.我该怎么办才能使退出代码退出流程 如果线程中断? 示例: import java.io.IOException; public class Exectest { public static void main(String args[]){ int exitval; try { Process p = Runtime.getRuntime().exec("ls -la ~/"); exitval = p.waitFor(); System.out.println(exitval); } catch (IOException e) { //Call failed, notif
12 2023-06-15
编程技术问答社区
Future.get()总是被中断,出现InterruptedException。
我在java中对future.get()有一个奇怪的问题.它总是以中断的返回,但是奇怪的是,例外的原因是无效的,所以我不能告诉谁打断了我. 情况变得更糟,因为我在致电get get()之前检查一下,并且未来的工作已经完成. 这是负责下面输出的代码. f是未来的,而可可的回报是代理并不相关的标签.抱歉,如果打印线太多,我只是想尽我所能提供糊状信息.现在,来自Callable的呼叫方法是一个简单的System.out.println("Hola soy agente"),正如您将看到的,被打印出来,这意味着可呼叫并没有导致异常 这是代码: try { System.out.println(f.isDone()); //true System.out.println(f.isCancelled()); //false System.out.println(f.toString()); /
28 2023-04-30
编程技术问答社区
TRAP , 软件中断和硬件中断之间的区别?
我只是想知道它们之间的基本区别. 我在某些地方发现陷阱本质上也被称为软件中断,或者类似于例外. 另外,软件中断和异常之间的基本区别是什么? 软件中断可以通过int指令生成,但是陷阱只能由某些场景(例如Divide ot divide)生成?是的吗? 请为此查询提供合适的答案,该查询涵盖,S/W中断陷阱和异常. 解决方案 术语确实有点模糊,可能取决于CPU供应商. 很明显,硬件中断是由硬件信号触发的,并使CPU输入预定义的ISR.这些是(通常是外部)硬件触发的例外. 陷阱的符号在CPU供应商之间有所不同.非智能CPU can (例如,在68000或PowerPC CPU上)的陷阱是软件中断.这些CPU具有陷阱指令.在x86上,该指令将是iNT xxx,在ARM CPU SWI/SVC上,在PowerPC陷阱#XX上.这将是用户程序故意触发的例外(通常用于输入操作系统) Intel World中的陷阱是特殊条件,例如按零分割或其他错误(例如无
在汇编指令运行时中断它
当中断CPU时,如果确认该问题,则通过保存当前地址位置来处理它.否则将被忽略. 我想知道是否打断了汇编指令呼叫. 例如, mvi a, 03h ; put 3 value into acc. in 8080 assembly 可以中断一行指令吗?或者,它是原子? 始终保证"一行组装指令"总是原子? 如果没有"锁定"关键字,即8080组件中,如何提供原子性? 例如,如果要操作64位总和,但是没有办法使用"一行指令"来完成操作,并且在按和运行时会中断.如何在组装级别预防? 这个概念开始为我沸腾. 解决方案 是的,所有"正常" ISA(包括8080和x86)保证指示在同一核心上的中断是原子的.指令已经完全执行,并且其所有架构效应都是可见的(在中断处理程序中),或者没有一个.通常仔细记录与此规则的任何偏差. 例如,英特尔的X86手册vol.3(〜1000页PDF)确实提出了这一点的意义: 6.6程序或任务重新启动 为了在处理异常
26 2023-04-12
编程技术问答社区
在等待退出信号时处理InterruptedException(Android的bug?)
我遇到了下面的代码,我想知道它是否确实做了我认为确实如此: synchronized(sObject) { mShouldExit = true; sObject.notifyAll() while (!mExited) { try { sObject.wait(); } catch (InterruptedException ex) { Thread.currentThread().interrupt(); } } } 关于上下文:还有另一个线程检查mShouldExit(sObject监视器内部),并将在这种情况下退出. 对我来说,这似乎不是正确的模式.如果发生中断,它将再次设置中断状态,因此当它返回sObject.wait()时,另一个InterruptedException会出现等等.切勿发布sObject监视器.这可能会导致无限
24 2023-04-06
编程技术问答社区
Thread.isInterrupted不起作用,Thread.interrupted起作用。
以下程序演示了问题(最新的JVM和Whatnot): public static void main(String[] args) throws InterruptedException { // if this is true, both interrupted and isInterrupted work final boolean withPrint = false; // decide whether to use isInterrupted or interrupted. // if this is true, the program never terminates. final boolean useIsInterrupted = true; ExecutorService executor = Executors.newSingleThreadExecutor(); final CountDownLatch
20 2023-04-06
编程技术问答社区
具有Lambda表达式的线程
i在第42行和43行中有一个错误:Thread t1=new Thread(()->prod.test());,Thread t2=new Thread(()->cons.test()); 未手动异常类型InterruptedException .如果我尝试QuickFix,它将使用Catch exception 创建尝试捕获,它将具有相同的错误,并将尝试以相同的方式将其修复,以继续使用尝试捕获. import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; interface Predicate { public void test() throws InterruptedException; } class MyClass { int num = 0; Lock lock = new ReentrantLock(); publ
16 2023-04-05
编程技术问答社区
在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状态吗? 解决方案 interrupt()中断您中断的线程,而不是进行中断的线程. c.f. Thread.currentThread().interrupt(); t.join(); // will throw InterruptedException 其他解决方案 在thread.join()之前调用thread.interrupt()会导致join()立即扔一个InterruptedException? 不,它不会投掷.只有当
30 2023-04-05
编程技术问答社区