我们来看这段代码:
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);
}
}
执行结果,自己去试下