`
wuhoujian322
  • 浏览: 65228 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java基础知识回顾第九篇 - Java异常机制 | 认识多线程

阅读更多

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来控制线程安全,这是一种隐式的锁操作。

  • 大小: 40.9 KB
1
0
分享到:
评论

相关推荐

    Java基础知识PPT

    这份"Java基础知识PPT"涵盖了Java学习的核心概念,对于初学者来说是一份非常宝贵的资料。 1. **Java简介**:Java最初由James Gosling等人开发,其设计理念是“一次编写,到处运行”。它基于C++,但简化了语法,去除...

    java开发实战经典习题答案

    - Java多线程编程的基础知识,如创建线程的方式(继承Thread类或实现Runnable接口)、同步机制(synchronized、volatile关键字)。 8. 常用类库 - Java标准库中提供的常用类,例如集合框架(Collection Framework...

    Java语言程序设计-进阶篇(原书第8版).

    5. 多线程与并发编程:Java提供了强大的多线程支持,本书会讲解线程的基本概念、线程的生命周期、线程同步机制、并发工具类等,并讨论在多线程编程中可能遇到的问题和解决方案。 6. I/O流与文件操作:Java提供了...

    Java语言程序设计第10版(基础篇)复习题答案

    《Java语言程序设计第10版(基础篇)》是一本深入浅出的Java编程教材,旨在帮助初学者掌握这门强大的面向对象编程语言。复习题答案提供了对每一章节核心概念的检验和巩固,帮助读者确认对每个主题的理解是否到位。...

    Pro-Java-FX-2-A-Definitive-Guide-to-Rich-Clients-with-Java-Technology

    本书通过一系列章节,从基础知识到高级概念,全面覆盖了JavaFX的各种特性和应用场景。 #### 二、第一章概览:快速入门JavaFX 在第一章中,《Getting a Jump Start in JavaFX》介绍了JavaFX的基本概念和发展历程,...

    java2实用教程

    《java2实用教程》涵盖了Java语言的基础知识和一些高级特性,适合初学者系统学习Java编程。以下是书中各章节的知识点总结: 第一章:JAVA语言入门 1.1 JAVA的诞生:介绍了Java语言的历史背景,它是由Sun ...

    Java Programming 24-Hour Trainer

    Java基础回顾 (Lesson5) - **数据类型与运算符**:复习Java中的各种数据类型和常用运算符。 - **流程控制语句**:再次强调循环和条件判断语句的重要性。 ##### 6. 包、接口与封装 (Lesson6) - **包的使用**:...

    Java实用教程(第2版)-PPT

    1. **Java基础知识**:了解Java的历史、特点以及其与C++的区别。学习Java环境搭建,包括JDK的安装和配置,以及编写并运行第一个"Hello, World!"程序。 2. **语法基础**:深入理解Java的基本语法,如数据类型(基本...

    java程序设计教程(清华大学)

    6. **第9章 异常**:讲解了如何处理运行时错误和异常,包括try-catch-finally语句块,自定义异常以及异常处理的最佳实践。 7. **第10章 集合**:更全面地探讨集合框架,包括Set、Map接口,以及HashMap、TreeMap等...

    Java实验指导书 2009

    实验内容被精心设计为九种类型,涵盖了从基本语法到高级主题的广泛范围,如数组与字符串处理、面向对象编程、异常处理、多线程编程等。 #### 二、实验指导1 JAVA语言概述 **知识点笔记:** - **Java语言简介**:...

    JAVA课程总复习

    总的来说,"JAVA课程总复习"是一个全面的Java学习资源,它将帮助开发者巩固基础知识,理解高级特性,提升解决问题的能力,为进一步的学习和职业发展打下坚实的基础。无论是初学者还是有经验的开发者,都可以从中受益...

    JAVA基础复习资料

    9. **第九章:接口与抽象类** 探讨接口与抽象类的区别,以及它们在设计模式和模块化中的作用。 10. **第十章:泛型与反射** 泛型提供类型安全,减少类型转换,反射则允许程序在运行时动态访问类的信息和调用方法...

    Java Threads 2rd

    ### Java Threads 2rd #### 书名:Java Threads 2rd ...以上是《Java Threads 2rd》这本书的主要内容概述,涵盖了Java线程技术的各个方面,从基础知识到高级主题均有涉猎,旨在帮助读者全面掌握Java中的线程编程技术。

    18天java学习之经典笔记

    "18天Java学习之经典笔记"是一份专为快速掌握Java基础知识而设计的学习资料,适用于那些希望在短时间内复习、备考或者准备面试的人员。这份笔记涵盖了Java的核心概念,通过18天的学习计划,帮助读者逐步理解并熟练...

    Java SE完整版精品优质课件 自学入门必看的优秀Java基础知识培训教案 第04章_高级类特性1(共72页).pptx

    本课件主要针对Java基础知识进行讲解,适合初学者自学和有经验的开发者回顾巩固。课程分为14个章节,覆盖了从语言概述到高级特性的全方位内容。 在第4章"高级类特性1"中,我们重点探讨了面向对象编程的一些关键概念...

    郑莉.清华大学-学堂在线.Java-PPT

    7. **多线程**:Java内置对多线程的支持,使得开发者能同时执行多个任务。线程的创建、同步和通信是Java并发编程的重点,理解Thread类和Runnable接口,以及synchronized关键字和wait/notify机制,可以帮助我们编写...

    Java How TO Program/Java程序设计教程ppt

    《Java程序设计教程》是一本深入浅出的Java学习资源,通过PPT的形式,系统地讲解了Java编程的基础知识和核心概念。这份压缩包包含了多个章节的课件,包括jhtp4_17.ppt至jhtp4_18.ppt等多个文件,涵盖了广泛的Java...

    JAVA课后题答案(全)

    第4章到第10章的内容可能包括异常处理、文件I/O、多线程、网络编程、反射机制、泛型、枚举、注解以及Java的高级特性如Lambda表达式和Stream API。每一章的参考答案都会提供具体的代码示例,帮助学生理解和应用这些...

Global site tag (gtag.js) - Google Analytics