一、几个基本概念的区分 1.进程与程序的区分 程序 进程 包含代码部分、数据部分 包含代码部分、数据部分、进程控制块 顺序执行 并发执行 独占资源 共享资源 同步的 异步的 静态的 动态的 (本质区别) 2.线程与进程的关系 相同:线程是轻量级的进程,一个进程
1、线程中的异常处理 先看看一个简单的线程异常情况 //有异常的线程public class MyThread extends Thread {
@Override
public void run() {
String username = null;
System.out.println(username.hashCode());
}} public class Run {
public static void main(String[] args) throws InterruptedException {
MyThread t = new MyThread();
t.start();
}} Exception in thread "Thread-0" java.lang.NullPointerException
程序运行后在控制台输出空指针异常。在Java的多线程技术中,可以对多线程中的异常进行“捕捉”,使用的是UncaughtExceptionHandler类,从而可以对发生的异常进行有效的处理。 public class Run {
public static void main(String[] args) throws InterruptedException {
MyThread t1 = new MyThread();
t1.setName("线程t1");
t1.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
public void uncaughtException(Thread t, Throwable e) {
System.out.println("ThreadName="+t.getName()+" 出现了异常");
e.printStackTrace();
}
});
t1.start();
}} ThreadName=线程t1 出现了异常 java.lang.NullPointerException
方法setDefaultUncaughtExceptionHandler()的作用是为指定线程类的所有线程对象设置 public class Run {
public static void main(String[] args) throws InterruptedException {
MyThread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
public void uncaughtException(Thread t, Throwable e) {
System.out.println("ThreadName="+t.getName()+" 出现了异常");
e.printStackTrace();
}
});
MyThread t1 = new MyThread();
t1.setName("线程t1");
t1.start();
MyThread t2 = new