栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Day15——异常、线程

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Day15——异常、线程

  • 异常 
定义:

指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。异常的根类是java.lang.Throwable,其下有两个子类:java.lang.Error与java.lang.Exception,平常所说的异常指java.lang.Exception。

Throwable体系:

  • Error:严重错误Error,无法通过处理的错误,只能事先避免,好比绝症。

  • Exception:表示异常,异常产生后程序员可以通过代码的方式纠正,使程序继续运行,是必须要处理的。好比感冒、阑尾炎。

Throwable中的常用方法:

  • public void printStackTrace():打印异常的详细信息。

    包含了异常的类型,异常的原因,还包括异常出现的位置,在开发和调试阶段,都得使用printStackTrace。

  • public String getMessage():获取发生异常的原因。

    提示给用户的时候,就提示错误原因。

  • public String toString():获取异常的类型和异常描述信息(不用)。

分类:
  • 编译时期异常:checked异常。在编译时期,就会检查,如果没有处理异常,则编译失败。(如日期格式化异常)

  • 运行时期异常:runtime异常。在运行时期,检查异常.在编译时期,运行异常不会编译器检测(不报错)。(如数学异常)

 

处理:

①throw:throw用在方法内,用来抛出一个异常对象,将这个异常对象传递到调用者处,并结束当前方法的执行。

 

②try-catch:try-catch的方式就是捕获异常。

  • 捕获异常:Java中对异常有针对性的语句进行捕获,可以对出现的异常进行指定方式的处理。

try:该代码块中编写可能产生异常的代码。

catch:用来进行某种异常的捕获,实现对捕获到的异常进行处理。

注意:try和catch都不能单独使用,必须连用。

③throws:

④finally:

注意:finally默认执行 

自定义异常:

异常类如何定义:

  1. 自定义一个编译期异常: 自定义类 并继承于java.lang.Exception。

  2. 自定义一个运行时期的异常类:自定义类 并继承于java.lang.RuntimeException。

定义一个异常处理类:

import java.util.ArrayList;
import java.util.Scanner;
public class ExceptionDemo {
    private static ArrayList names;
    static {
        names = new ArrayList<>();
        names.add("张三");
        names.add("李四");
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入注册姓名:");
        String name = scanner.nextLine();
        try {
            registerService(name);
            System.out.println("注册成功");
        } catch (RegisterException e) {
            System.out.println("注册失败" + e.getMessage());
        }
    }
    public static void registerService(String name) throws RegisterException {
        if (names.contains(name)) {
            throw new RegisterException("对不起,名称已被注册");
        }
        else {
            names.add(name);
        }
    }
}

定义一个业务逻辑异常类:

public class RegisterException extends RuntimeException{
    public RegisterException(String message) {
        super(message);
    }
}

 

 

  • 线程 
并发与并行
  • 并发:指两个或多个事件在同一个时间段内发生。

  • 并行:指两个或多个事件在同一时刻发生(同时发生)。

  • 区别:并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。
    并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。
    在一台处理器上“同时”处理多个任务,在多台处理器上同时处理多个任务。如hadoop分布式集群。
     

线程与进程
  • 进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创建、运行到消亡的过程。

  • 线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。

    简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程

  • 区别:简而言之,进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程。进程在执行过程中拥有独立的内存单元,而多个线程共享内存资源,减少切换次数,从而效率更高。线程是进程的一个实体,是cpu调度和分派的基本单位,是比程序更小的能独立运行的基本单位。同一进程中的多个线程之间可以并发执行。

创建线程类

1.继承方式实现多线程

2.匿名内部类实现线程

3.实现Runnable接口的方式实现线程

4.匿名内部类实现接口创建线程

package case1;

public class Thread_1 {
    public static void main(String[] args) {
        //匿名内部类方式
       new Thread() {
            public void run() {
                System.out.println("匿名内部类实现线程");
            }
        }.start();
//        t1.start();
        //继承方式
        Thread t2 = new Test_Thread();
        t2.start();
        //创建接口实现类的实例保存在接口的引用中
        Runnable r = new Threadimpl();
        Thread t3 = new Thread(r);
        t3.start();

        //匿名内部类实现接口创建线程
        Thread t4 = new Thread(new Threadimpl()){
            public void run() {
                System.out.println("匿名内部类实现接口创建线程");
            }
        };
        t4.start();
    }
}
package case1;

public class Test_Thread extends Thread {
    public void run() {
        System.out.println("继承方式实现多线程");
    }
}
package case1;

public class Threadimpl implements Runnable {

    @Override
    public void run() {
        System.out.println("实现Runnable接口的方式实现线程");
    }
}
 常用方法:

setName:设置线程名

 sheep:可以通过改变休眠时间改变线程顺序

 yield:线程礼让

package case2;

public class ThreadMethod4 {
    public static void main(String[] args) {
        new Thread("线程一") {

            @Override
            public void run() {

                for (int i = 0; i < 10; i++) {
                    System.out.println(getName() + ",i=" + i);
                    try {
                        Thread.sleep(60);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    Thread.yield();
                }
            }
        }.start();
        new Thread("线程二") {
            @Override
            public void run() {
                for (int i = 0; i < 10; i++) {
                    System.out.println(getName() + ",i=" + i);
                    try {
                        Thread.sleep(60);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    Thread.yield();
                }
            }
        }.start();
    }
}

 

 

interrupt:中断线程

 

join:线程加入

package case2;

public class ThreadMethod5 {
    public static void main(String[] args) {
        Thread t1 = new Thread("线程一") {
            @Override
            public void run() {
                System.out.println(getName()+"执行");
            }
        };
        t1.start();
        Thread t2 = new Thread("线程二") {
            @Override
            public void run() {
                try {
                    t1.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(getName()+"执行");
            }
        };
        t2.start();
        Thread t3 = new Thread("线程三") {
            @Override
            public void run() {
                try {
                    t2.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(getName()+"执行");
            }
        };
        t3.start();

    }
}

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/271308.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号