異常を投げた後、損失したのはスレッドですか?
:
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);
}
}
実行結果、自分でやってみる