2021_06_14_异常和线程

2021_06_14_异常和线程

1. 能够辨别程序中异常和错误的区别

异常 exception 捕获并处理程序还能运行

错误 error 无法捕获无法处理,程序崩溃

2. 说出异常的分类

exception

  • runtimeException
  • checkedException

image-20210616140854095

3. 异常体系

  • Java.lang.Throwable
    • Error 无法解决只能尽量避免,一旦出现程序崩溃
    • Exception 可以避免和解决,处理完成程序正常运行
      • RuntimException
      • CheckedException
  • Throwable 常用方法
    • printStackTrace() 打印异常的详细信息异常种类,异常出现位置
    • getMessage() 获取异常的原因
    • toString() 获取异常的类型和异常描述信息

4. 列举出常见的三个运行期异常

  1. IndexOutOfBoundsException
  2. NullPointerException
  3. SqlException
  4. NumberFormatException

5. 能够使用try…catch关键字处理异常

try{
  int i = 1/0;
}
catch(ArithmeticException e){
  e.printStackTrace();
}

6. 能够使用throws关键字处理异常

  • throw 方法内使用 抛出一个指定的异常

    image-20210614111529300

  • throws 使用在方法上,抛出给调用该方法的人,可能出现异常,多个异常用,隔开

7. 能够自定义异常类

  • 编译时期异常 extends java.lang.Exception
  • 运行时异常 extends java.lang.RuntimeException
public class SelfException{
  private Static final String[]names = {"bill","cill","jill"};
  
  main{
    try{
      checkUsername("jill");
    }catch(RegisterException e){
      e.printStackTrace();
    }
  }
  
  private static void checkUsername(String username) throws RegisterException{
    for(String name:names){
      if(name.equals(username)){
        throw new RegisterException(username+"已经存在,请重试>>>");
      }
    }
    return true;
  }
}


//自定义异常类
class RegisterException extends Exception{
  /**
  *空参构造
  */
  public RegisterException(){
    
  }
  /**
  *带参构造 
  */
  public RegisterException(String message){
    super(message);
  }
}

8. 能够处理自定义异常类

  • try catch 自行处理
  • throws 抛给调用者

##9. 并行和并发

  • 并发: 多个线程在单个核心运行,在一个时间单元内只有一个线程运行,系统不停切换线程,看起来像是同时运行,实际是线程不停切换,即指令之间交错执行,操作系统称这种交错执行的机制为:上下文切换;

  • 并行: 每个线程分配给独立的核心,线程同时运行

  • 上下文切换:CPU给线程分配时间片(也就是分配给线程的时间),执行完时间片后切换到另一个线程

  • 切换之前会保存线程的状态,下次时间片再给这个线程时才能知道当前状态

  • 从保存线程A的状态再切换到线程B时,重新加载线程B的这个状态的过程就是上下文切换

  • 上下文切换会消耗大量的CPU时间

  • 单核CPU: 微观并发,宏观并行

    • 不存在多线程!一个时间单元内只能执行一个线程的任务,因此在单核CPU上各个程序是分时的交替执行,但是因为一个时间单元非常短,所以感觉起来像是同时运行多个任务
  • 多核CPU:微观并行

    • 每个线程分配给独立的CPU,各不影响

10. 程序 进程 线程

  • 程序: 是为了完成某种特定任务,用某种特定语言编写的一组指令的集合 静态对象
  • 进程: 资源分配的单位,系统在运行时候会为不同的进程分配不同的内存区域 动态
  • 线程: 进程进一步细化成为线程,是程序内部的一条执行路径
    • 线程特点
      • 资源调度和执行的单位
      • 拥有独立的运行栈和程序计数器(PC),线程切换开销小
      • 同一个进程中的线程共享相同的内存单元,可以访问相同的变量和对象

11. 能够开启新线程

  • 继承Thread类,重写run方法,调用Thread对象的start方法
  • 实现Runnable接口,对象传入Thread构造方法,调用Thread对象的start方法
  • 实现Callable接口,Callable接口对象传入FutureTask构造函数,FutureTask对象传入Thread构造函数
  • 从线程池中获取ExecutorService executorService = Executors.newFixedThreadPool(4);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值