Java 如何处理线程中的异常?
我正在开发一个Android应用程序。我有一个结构如下的线程:Java 如何处理线程中的异常?,java,android,multithreading,exception-handling,Java,Android,Multithreading,Exception Handling,我正在开发一个Android应用程序。我有一个结构如下的线程: code... try code... catch printexception code... try code... catch printexception code.. 当我遇到其中一个异常时,我知道代码的其余部分将无法工作,不应执行。遇到异常时如何停止线程?我必须创建一个包含所有代码的“大尝试”吗?我已经在这样的代码上工作了一段时间,但我以前从未关心过异常。什么是一个好的、干净的方法来实现
code...
try
code...
catch
printexception
code...
try
code...
catch
printexception
code..
当我遇到其中一个异常时,我知道代码的其余部分将无法工作,不应执行。遇到异常时如何停止线程?我必须创建一个包含所有代码的“大尝试”吗?我已经在这样的代码上工作了一段时间,但我以前从未关心过异常。什么是一个好的、干净的方法来实现这一点?一般来说,每当你试图编码时,你应该将它们保持在try中,然后在catch下获得结果 就像:
try
{
int x = 5/0;
}
catch(Exception e)
{
e.printStackTrace();
}
通过提及printStackTrace,您可以获得行号以及异常的描述。我希望我把我的观点讲清楚 如果您发布的代码存在于run()方法中,则只要在出现异常时尽早返回即可,从而使线程完成并避免执行随后的任何代码
code...
try {
code...
} catch (Exception e) {
e.printStackTrace();
return;
}
code...
您还可以在异常发生时设置一个标志,并定期检查该标志以确定线程是否应继续运行
bool isCanceled = false;
void run() {
while (!isCanceled) {
doSomeWork();
}
}
void doSomeWork() {
try {
code...
} catch (Exception e) {
e.printStackTrace();
isCanceled = true;
return;
}
}
当然,您也可以对代码进行结构化,使依赖于上面语句的任何语句也位于try块中。如果发生异常,控制流将转移到catch块,try块中任何紧跟违规行的语句都不会执行。我想这就是你所说的“大尝试”的意思,里面有所有的代码
code...
try
code...
try // this try won't be executed if the line above it throws an exception
code...
catch {
printexception
return
}
code..
catch {
printexception
return // return early
}
code....
这很简单,请尝试以下方法:
public static void main(String[] args) {
Thread thread = new Thread(new RunnableTest());
thread.start();
}
static class RunnableTest implements Runnable {
@Override
public void run() {
int i;
try {
i = 1 / 0;
} catch (Throwable t) {
t.printStackTrace();
return;
}
System.out.println(i);
}
}
为了更好地控制线程,您可以使用包中的
Executors
和ThreadPoolExecutors
为什么不在第一个异常发生时终止线程呢?是的,如果你愿意,你可以在那个时候停止线程。