我们来看这段代码:
package cn.rjb.test;
public class Test {
public static void main(String args[]){
for(int i =0 ; i< 10 ;i++){
if(i%3== 0){
thread(("a"+i));
}else{
thread((""+i));
}
}
}
public static void thread(String str){
final String a =str;
new Thread(
new Runnable(){
public void run(){
method(a);
System.out.println(a+"这里执行!");
}
}
).start();
}
public static void method(String a){
Integer.parseInt(a);
}
}
打印结果:
1这里执行!
2这里执行!
Exception in thread "Thread-3" java.lang.NumberFormatException: For input string: "a3"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:447)
at java.lang.Integer.parseInt(Integer.java:497)
at cn.rjb.test.Test.method(Test.java:31)
at cn.rjb.test.Test$1.run(Test.java:23)
at java.lang.Thread.run(Thread.java:619)
Exception in thread "Thread-0" java.lang.NumberFormatException: For input string: "a0"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:447)
at java.lang.Integer.parseInt(Integer.java:497)
at cn.rjb.test.Test.method(Test.java:31)
at cn.rjb.test.Test$1.run(Test.java:23)5这里执行!
7这里执行!
4这里执行!
at java.lang.Thread.run(Thread.java:619)
Exception in thread "Thread-9" java.lang.NumberFormatException: For input string: "a9"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:447)
at java.lang.Integer.parseInt(Integer.java:497)
at cn.rjb.test.Test.method(Test.java:31)
at cn.rjb.test.Test$1.run(Test.java:23)
at java.lang.Thread.run(Thread.java:619)
8这里执行!
Exception in thread "Thread-6" java.lang.NumberFormatException: For input string: "a6"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:447)
at java.lang.Integer.parseInt(Integer.java:497)
at cn.rjb.test.Test.method(Test.java:31)
at cn.rjb.test.Test$1.run(Test.java:23)
at java.lang.Thread.run(Thread.java:619)
抛了异常之后,线程就停止了,并且从异常抛出处后面的代码也不会执行了。
这是我从程序执行的结果看来的,大家有什么意见呢?
解决:
在抛出异常出使用 try--catch 进行捕获,后面就可以继续执行了。
看下面的代码,就可以正常执行了。
package cn.rjb.test;
public class Test {
public static void main(String args[]){
for(int i =0 ; i< 10 ;i++){
if(i%3== 0){
thread(("a"+i));
}else{
thread((""+i));
}
}
}
public static void thread(String str){
final String a =str;
new Thread(
new Runnable(){
public void run(){
try{
method(a);
}catch(Exception e){
}
System.out.println(a+"这里执行!");
}
}
).start();
}
public static void method(String a){
Integer.parseInt(a);
}
}
执行结果,自己去试下
Java线程异常处理
本文通过一个Java示例程序展示了如何在线程中处理异常,并通过使用try-catch语句确保即使发生异常也能使线程继续运行。文章还讨论了异常处理的重要性及其实现方式。

被折叠的 条评论
为什么被折叠?



