Coo*_*SRS 0 java android interrupted-exception
我在代码中多次看到出现中断异常。我如何解决它?
例子:
for (int i = 0; i < readLimit; i++) {
if (fileName.exists())
return readFile(fileName);
Thread.sleep(1000); // Here is where I get the error
}
}
Run Code Online (Sandbox Code Playgroud)
由于我不知道您对Java了解多少、Java 到底如何工作以及什么是并发性,所以我将尝试尽可能多地解释,几乎不需要任何背景信息。
首先,我们将看一下 Oracle 的InterruptedException.
当线程正在等待、休眠或以其他方式占用,并且线程在活动之前或活动期间被中断时抛出。[...]
这是什么意思?
在回答这个问题之前,您必须初步了解 a 的Thread工作原理。
线程本来只是一段可以与其他线程分开管理的代码。它可以同时运行(请参阅并发)、按计划运行等。
例子
如果你启动一个普通的java程序,该main()方法是在一个自己的线程1中创建的。你所做的一切都将在这个线程中执行。您创建的每个类、您调用的每个方法以及基本上源自main().
但如果你创建一个Thread,它会在自己的线程 2 中运行。你在该run()方法中所做的一切都将在线程 2 中执行。
如果创建一个新的会发生什么Thread?
该join()方法被调用。
该join()方法启动线程并run()正在执行。
不仅有join()不带参数的方法,还有join(long millis)带参数的方法。
何时以及为何抛出它?
正如拉胡尔·艾耶(Rahul Iyer)所说,原因有很多。我挑选了其中一些,以便让您在被召唤时有一种感觉。
InterruptedException当超过超时时确实可以抛出。当 被调用时就会发生这种情况join(long millis)。该参数指定线程可以运行给定的毫秒数。当线程超过此超时时,它将被中断。源(从第 769 行到第 822 行)。
也许操作系统(Windows、Linux、Android 等)决定停止该程序。为什么?为了释放资源,你的程序被误认为是病毒,硬件正在关闭,用户手动关闭它等。
抛出 InterruptedExceptionThread
例如,您已连接到互联网并正在阅读某些内容,但互联网突然断开。
interrupt()叫做
正如已经提到的,当您调用anyInterruptedException时,也会抛出an (非常合乎逻辑)。interrupt()Thread
怎么处理呢?
您可以/应该像处理其他异常一样处理它。将它包装在tryand中catch,声明它的方法throws,记录它,等等。
这可能是最适合您的资源:Handling InterruptedException in Java。
| 归档时间: |
|
| 查看次数: |
2661 次 |
| 最近记录: |