多线程的异常
代码示例-1
class DemoMul1 extends Thread{
private String name;
public DemoMul1(String name) {
this.name = name;
}
@Override
public void run() {
show();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private void show()
{
for (int i = 0 ; i < 10; i++)
{
System.out.println(name + i);
}
}
}
public static void main(String[] args) {
DemoMul1 d1 = new DemoMul1("AAA");
DemoMul1 d2 = new DemoMul1("BBB");
DemoMul1 d3 = new DemoMul1("CCC");
DemoMul1 d4 = new DemoMul1("DDD");
d2.start();//d2这个线程开启,多了一条执行路径
d3.start();
d4.run();
d1.run();//由主线程执行
int[] arr = new int[3];
System.out.println(arr[4]);
// * 主线程出异常会导致其所在线程结束但是不会影响其他线程的执行
// * Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
// at com.clsaa.mul_thread.base_1.ThreadDemo.main(ThreadDemo.java:151)
// at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
// at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
// at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
// at java.lang.reflect.Method.invoke(Method.java:497)
// at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
// *
}
分析
由抛出的异常信息Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 4
主线程出异常会导致其所在线程结束但是不会影响其他线程的执行,在已经开启的线程发生异常则不会影响其他线程.