我们来看这段代码:
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);
}
}
执行结果,自己去试下
分享到:
相关推荐
**当一个线程进入一个对象的synchronized方法A之后,其他线程是否可进入此对象的synchronized方法B** - 不可以,因为同一对象上的所有`synchronized`方法互斥。 **synchronized、volatile、CAS比较** - **...
` 这条语句创建了两个对象:一个在字符串常量池中,另一个是通过`new`创建的对象。 - `Math.round(11.5)` 返回12,`Math.round(-11.5)` 返回-11。 - `short s1 = 1; s1 += 1;` 这条语句是正确的,编译器会自动...
然而,当尝试将一个`int`或`long`值赋给`float`变量时,由于精度损失,需要显式地进行类型转换,如`float f = (float)12345678;`。 2. **算术运算与数据精度**:在进行浮点数运算时,例如将`int`类型改为`float`...
继承是面向对象编程中的另一个关键特性,它允许创建一个新类(子类)继承现有类(父类)的属性和方法。这不仅提高了代码的复用性,还使得类之间的关系更加清晰。例如,“轿车”类可以从“汽车”类中继承所有属性和...
26. **synchronized方法与锁**:一个线程进入对象的synchronized方法后,其他线程无法进入该对象的其他synchronized方法,但可以进入非synchronized方法。 27. **try-finally执行顺序**:finally块中的代码总是在...
在多线程环境下,如果一个线程正在遍历ArrayList,而另一个线程同时修改了ArrayList的结构(例如添加或删除元素),可能会导致两种不同的行为。"安全失败"允许遍历继续,但返回的结果可能不正确,因为遍历的是...
单例模式确保一个类只有一个实例,并提供全局访问点。常用实现方式有饿汉式、懒汉式等。 #### 19. 实现3个整数a、b、c的最大值 通过条件语句或`Math.max()`函数可以实现三者之间的最大值计算。 #### 20. String...
`throws`用于声明方法可能抛出的异常,`throw`用于抛出一个异常。 44. 运行时异常是不强制声明的,受检异常需要显式处理。两者都继承自`Exception`类,但运行时异常继承自`RuntimeException`。 45. 常见的运行时...
它接收两个参数,第一个是保留的小数位数,第二个是舍入模式。之后,我们再将格式化的BigDecimal转换回字符串,并设置到EditText中显示。 5. **异常处理**:在处理用户输入时,我们需要考虑各种异常情况,比如无效...
` 主动抛出了一个 `Exception` 类型的异常。由于这个异常被 `catch (Exception e)` 所捕获,所以程序会输出 `"Caught in main()"`。之后,`System.out.println("nothing");` 这一行也会被执行,输出 `"nothing"`。...
从内存中清除,从账户中取出amt,如果amt>账户余额抛出异常,一个实体Bean可以表示不同的数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始化一个EJB实例 5个目标文件,演示Address EJB...
4. **异常处理**:详述.NET中的异常模型,包括如何抛出和捕获异常,最佳实践以及如何使用try-catch-finally语句进行异常处理。 5. **集合与数据结构**:介绍.NET框架提供的各种集合类,如ArrayList、LinkedList、...
- 一个类可以实现多个接口,但只能继承一个抽象类。 - 抽象类可以包含构造器、字段、静态方法等,而接口不能。 **20. abstract 方法能否与 static、native 和 synchronized 一起使用** - **背景:** Java 中 ...
2. **noexcept规范**:noexcept是C++11中引入的一个关键字,用于指明函数不会抛出异常。书中对noexcept的使用给出了详细的说明,并指出其对于提高代码效率和优化异常安全性的贡献。 3. **完美转发**:完美转发允许...
- 给定一个空栈和一组数据,要达到2 5 4 1 3的顺序,分析各选项,不可能是4 1 3 5 2,因为1和3不能在4之后同时出现。 10. **SQL查询**: - 要求输出以'州'结尾的城市数量降序排列的省份及其数量,且输出第二多和...
保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除,从账户中取出amt,如果amt>账户余额抛出异常,一个实体Bean可以表示不同的数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始...
保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除,从账户中取出amt,如果amt>账户余额抛出异常,一个实体Bean可以表示不同的数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始...
从内存中清除,从账户中取出amt,如果amt>账户余额抛出异常,一个实体Bean可以表示不同的数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始化一个EJB实例 5个目标文件,演示Address ...
从内存中清除,从账户中取出amt,如果amt>账户余额抛出异常,一个实体Bean可以表示不同的数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始化一个EJB实例 5个目标文件,演示Address ...
从内存中清除,从账户中取出amt,如果amt>账户余额抛出异常,一个实体Bean可以表示不同的数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始化一个EJB实例 5个目标文件,演示Address ...