一旦所有用户线程都结束运行,守护线程会随JVM一起结束工作main函数所在的线程就是一个用户线程啊,main函数启动的同时在JVM内部同时还启动了好多守护线程,比如垃圾回收线程。
1. NullPointerException:空指针异常; 2. SQLException:数据库相关的异常; 3. IndexOutOfBoundsException:数组下角标越界异常; 4. FileNotFoundException:打开文件失败时抛出; 5. IOException:当发生某种IO异常时抛出; 6. ClassCastException:当试图将对象强制转换为不是实例的子类时,抛出此异常;
外归并排序: - 对文件分割,然后分别排序 - 排好序的文件依次读取一个缓冲区的大小,然后进行排序,输出到输出缓冲区,然后保存到结果文件。
AIO是异步IO的缩写,虽然NIO在网络操作中,提供了非阻塞的方法,但是NIO的IO行为还是同步的。对于NIO来说,我们的业务线程是在IO操作准备好时,得到通知,接着就由这个线程自行进行 IO操作,IO操作本身是同步的。
但并不是每个节点都需要获得同步支持的,只有链表的头节点(红黑树的根节点)需要同步,这无疑带来了巨大内存浪费。synchronized则是JVM直接支持的,JVM能够在运行时作出相应的优化措施:锁粗化、锁消除、锁自旋等等。