异常,多线程(十一)

异常

概念
在这里插入图片描述
异常体系
Throwable:Exception,Error
在这里插入图片描述
Exception:举例
1.DafeFormat中的parse方法导致的异常
2.索引越界异常
Error:
内存溢出异常
int[] a=new int(102410241024);创建数组空间超出了虚拟机的空间

  • 异常产生过程的解析
    在这里插入图片描述
异常的处理
  • 提示在这里插入图片描述
throw关键字

用在方法内–抛出一个指定的异常对象
在这里插入图片描述

  • Objects非空判断–用来检测参数是否异常
    在这里插入图片描述
  • throwable定义的三个处理异常的方法
异常处理方式
throws关键字

跟在方法名后—后续代码不会执行–中断处理
在这里插入图片描述

捕获异常try_catch语句

后续代码 继续执行
在这里插入图片描述

  • finally代码块
    在这里插入图片描述
  • 异常处理注意事项
  1. 多个异常分别处理—多个try_catch
    在这里插入图片描述
  2. 多个异常一次捕获,多次处理—一个try多个catch
    注意事项:
    在这里插入图片描述
    在这里插入图片描述
  3. 多个异常一次捕获一次处理
    在这里插入图片描述
    在这里插入图片描述
    eg:
    在这里插入图片描述
  • 运行时异常可以不处理或抛出,直接给JVM虚拟机处理
自定义异常类

在这里插入图片描述

多线程

  • 并发与并行
    在这里插入图片描述
  • 线程和进程:
    1.进程:一个内存中运行的应用程序------进入到内存的程序叫进程在这里插入图片描述
    2.线程:是进程中的一个执行单元
    一个程序运行后至少有一个进程,一个进程中可以包含多个线程在这里插入图片描述
  • 线程调度
    在这里插入图片描述
  • 主线程
    在这里插入图片描述
  • 创建线程类:
    java.lang.Thread
  • 创建线程的方式
    1.创建Thread类的子类在这里插入图片描述
  • 多次启动一个线程是非法的
    eg:
public class MyThread extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            System.out.println("run"+i);
        }
	}
}
public class Demo1 {
    public static void main(String[] args) {
        //创建多线程
        MyThread myThread=new MyThread();
        myThread.start();
        for (int i = 0; i < 2; i++) {
            System.out.println("main"+i);
        }
    }
}
//结果,调试时结果为先run后main
main0
main1
run0
run1
run2
run3
run4
run5
run6
run7
run8
run9
run10
run11
run12
run13
run14
run15
run16
run17
run18
run19

2.实现Runnable接口:好
在这里插入图片描述

public class MyThread2 implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            System.out.println(Thread.currentThread().getName()+" "+i);
        }
    }
}
public class Demo2 {
    public static void main(String[] args) {
        //创建多线程
        MyThread2 myThread=new MyThread2();
        Thread thread=new Thread(myThread);
        thread.start();
        for (int i = 0; i < 20; i++) {
            System.out.println(Thread.currentThread().getName()+" "+i);
        }
    }
}
  • 继承Thread和实现Runnable的区别在这里插入图片描述

线程

Thead类
在这里插入图片描述

  • 多线程原理在这里插入图片描述
  • 多线程内存图在这里插入图片描述
  • Thread类的常用方法:
    1.获取线程名称:
    A使用Thread类中的方法getName()
    String getName() --返回此线程的名称。
    B可以先获取到当前正在执行的线程,使用线程中的方法getName()获取线程的名称
    static Thread currentThread()-- 返回对当前正在执行的线程对象的引用。
    即String name=Thread.currentThread().getName()
    2.设置线程名称(了解)
    Avoid setName(String name) —将此线程的名称更改为等于参数 name 。
    B构造方法Thread(String name) --分配一个新的 Thread对象。
    3.sleep方法:
    static void sleep(long millis) --使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行),具体取决于系统定时器和调度程序的精度和准确性。
    eg:模拟秒表
  • 匿名内部类实现线程的创建:在这里插入图片描述
    eg:
匿名内部类创建线程
//匿名内部类创建线程
public class Demo3 {
    public static void main(String[] args) {
        //实现Thread类
        new Thread(){
            @Override
            public void run() {
                for (int i = 0; i < 10; i++) {
                    System.out.println(Thread.currentThread().getName()+" "+i);
                }
            }
        }.start();
        //实现Runnable接口
        new Thread(new Runnable(){
            @Override
            public void run() {
                for (int i = 0; i < 10; i++) {
                    System.out.println(Thread.currentThread().getName()+" "+i);
                }
            }
        }).start();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值