1、Java异常机制(Exception和Error)
我们先通过下面的一张图看看java异常层次结构:
从图中可以看出,不管是Exception还是Error,它们都继承自Throwable。下面我们来分别认识一下Exception和Error。
总的来说的,Exception和Error是一种不正常的行为,或许是程序本身导致的,也或许是系统导致的。
Exception:可以是被控制的或不可被控制的异常,由程序员导致的,需要在应用程序中进行处理。
Error:总是不可控制的错误,是系统错误或低层资源的错误;如果可能的话,需要在系统级别进行处理。
发生异常了怎么办?
需要异常处理,就是把程序从异常中恢复过来,通过两种方式:一种是使用try-catch块进行捕捉,另一种是使用throws关键字抛出,由具体调用方去进行处理。
另外还有一个容易让人混淆的区分:checked异常和unchecked异常,那么如何理解呢?
checked Exception:受检查异常,需要try-catch或throws处理的异常;
unchecked Exception:不受检查异常,不需要try-catch或throws处理的异常,包括Error、RuntimeException以及其子类;
常见的几种RuntimeException(运行时异常):
NullPointerExceptionextends;IndexOutOfBoundsException,ArrayIndexOutOfBoundsException,StringIndexOutOfBoundsException;IllegalArgumentException,NumberFormatException;ClassCastException;ArithmeticException
2、多线程的简单认识
认识多线程,我们需要先区分开进程和线程的区别。
进程:进行中的程序,其实就是一个应用程序运行时的内存分配空间。
线程:进程中一个程序执行控制单元,一条执行路径。
那么什么是多线程应用程序呢?当一个进程中出现多个线程的时候。
创建线程的三种方式:
第一种:继承Thread类,重写父类run方法,调用start()方法开启线程执行run()方法。
package com.tu.test.thread;
public class ThreadTest1 extends Thread{
//重新run方法,正在的线程执行主体
public void run(){
for (int i = 0;i<10;i++){
System.out.println(Thread.currentThread().getName() + " " + i);
}
}
public static void main(String[] args) {
for (int i = 0;i<20;i++) {
System.out.println("Thread in main:" + Thread.currentThread().getName() + i);
if (i == 10)
new ThreadTest1().start();
}
}
}
第二种:实现Runnable接口,覆盖run方法。
package com.tu.test.thread;
public class ThreadTest2 implements Runnable {
/**
*重新run方法,正在的线程执行主体
*/
public void run(){
for (int i = 0;i<10;i++){
System.out.println(Thread.currentThread().getName() + " " + i);
}
}
public static void main(String[] args) {
for (int i = 0;i<20;i++) {
System.out.println("Thread in main:" + Thread.currentThread().getName() + i);
if (i == 10) {
new Thread(new ThreadTest2(),"新线程").start();
}
}
}
}
第三种:通过Callable和Future创建线程
package com.tu.test.thread;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class ThreadTest3 implements Callable<Integer> {
/**
*线程执行体
*/
@Override
public Integer call() throws Exception {
int i = 0;
for (;i<10;i++){
System.out.println(Thread.currentThread().getName() + " " + i);
}
return i;
}
public static void main(String[] args) {
ThreadTest3 tt3 = new ThreadTest3();
FutureTask<Integer> task = new FutureTask<Integer>(tt3);
for (int i = 0;i<20;i++) {
System.out.println("Thread in main:" + Thread.currentThread().getName() + i);
if (i == 10) {
new Thread(task,"有返回值的线程").start();
}
}
try {
System.out.println("子线程的返回值为:" + task.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
既然是多线程,那么肯定会有线程安全的问题,对于同一个共享资源,多个线程同时访问就会出现问题。最简单的方式就是通过同步机制,使用synchronized来控制线程安全,这是一种隐式的锁操作。
相关推荐
这份"Java基础知识PPT"涵盖了Java学习的核心概念,对于初学者来说是一份非常宝贵的资料。 1. **Java简介**:Java最初由James Gosling等人开发,其设计理念是“一次编写,到处运行”。它基于C++,但简化了语法,去除...
- Java多线程编程的基础知识,如创建线程的方式(继承Thread类或实现Runnable接口)、同步机制(synchronized、volatile关键字)。 8. 常用类库 - Java标准库中提供的常用类,例如集合框架(Collection Framework...
5. 多线程与并发编程:Java提供了强大的多线程支持,本书会讲解线程的基本概念、线程的生命周期、线程同步机制、并发工具类等,并讨论在多线程编程中可能遇到的问题和解决方案。 6. I/O流与文件操作:Java提供了...
《Java语言程序设计第10版(基础篇)》是一本深入浅出的Java编程教材,旨在帮助初学者掌握这门强大的面向对象编程语言。复习题答案提供了对每一章节核心概念的检验和巩固,帮助读者确认对每个主题的理解是否到位。...
本书通过一系列章节,从基础知识到高级概念,全面覆盖了JavaFX的各种特性和应用场景。 #### 二、第一章概览:快速入门JavaFX 在第一章中,《Getting a Jump Start in JavaFX》介绍了JavaFX的基本概念和发展历程,...
《java2实用教程》涵盖了Java语言的基础知识和一些高级特性,适合初学者系统学习Java编程。以下是书中各章节的知识点总结: 第一章:JAVA语言入门 1.1 JAVA的诞生:介绍了Java语言的历史背景,它是由Sun ...
Java基础回顾 (Lesson5) - **数据类型与运算符**:复习Java中的各种数据类型和常用运算符。 - **流程控制语句**:再次强调循环和条件判断语句的重要性。 ##### 6. 包、接口与封装 (Lesson6) - **包的使用**:...
1. **Java基础知识**:了解Java的历史、特点以及其与C++的区别。学习Java环境搭建,包括JDK的安装和配置,以及编写并运行第一个"Hello, World!"程序。 2. **语法基础**:深入理解Java的基本语法,如数据类型(基本...
6. **第9章 异常**:讲解了如何处理运行时错误和异常,包括try-catch-finally语句块,自定义异常以及异常处理的最佳实践。 7. **第10章 集合**:更全面地探讨集合框架,包括Set、Map接口,以及HashMap、TreeMap等...
实验内容被精心设计为九种类型,涵盖了从基本语法到高级主题的广泛范围,如数组与字符串处理、面向对象编程、异常处理、多线程编程等。 #### 二、实验指导1 JAVA语言概述 **知识点笔记:** - **Java语言简介**:...
总的来说,"JAVA课程总复习"是一个全面的Java学习资源,它将帮助开发者巩固基础知识,理解高级特性,提升解决问题的能力,为进一步的学习和职业发展打下坚实的基础。无论是初学者还是有经验的开发者,都可以从中受益...
9. **第九章:接口与抽象类** 探讨接口与抽象类的区别,以及它们在设计模式和模块化中的作用。 10. **第十章:泛型与反射** 泛型提供类型安全,减少类型转换,反射则允许程序在运行时动态访问类的信息和调用方法...
### Java Threads 2rd #### 书名:Java Threads 2rd ...以上是《Java Threads 2rd》这本书的主要内容概述,涵盖了Java线程技术的各个方面,从基础知识到高级主题均有涉猎,旨在帮助读者全面掌握Java中的线程编程技术。
"18天Java学习之经典笔记"是一份专为快速掌握Java基础知识而设计的学习资料,适用于那些希望在短时间内复习、备考或者准备面试的人员。这份笔记涵盖了Java的核心概念,通过18天的学习计划,帮助读者逐步理解并熟练...
本课件主要针对Java基础知识进行讲解,适合初学者自学和有经验的开发者回顾巩固。课程分为14个章节,覆盖了从语言概述到高级特性的全方位内容。 在第4章"高级类特性1"中,我们重点探讨了面向对象编程的一些关键概念...
《Java程序设计教程》是一本深入浅出的Java学习资源,通过PPT的形式,系统地讲解了Java编程的基础知识和核心概念。这份压缩包包含了多个章节的课件,包括jhtp4_17.ppt至jhtp4_18.ppt等多个文件,涵盖了广泛的Java...
第4章到第10章的内容可能包括异常处理、文件I/O、多线程、网络编程、反射机制、泛型、枚举、注解以及Java的高级特性如Lambda表达式和Stream API。每一章的参考答案都会提供具体的代码示例,帮助学生理解和应用这些...
7. **多线程**:Java内置对多线程的支持,使得开发者能同时执行多个任务。线程的创建、同步和通信是Java并发编程的重点,理解Thread类和Runnable接口,以及synchronized关键字和wait/notify机制,可以帮助我们编写...