java-异常处理和线程的一些简单方法及使用
1.1 子类重写父类含有throws声明异常抛出的方法时的规则:
1.允许不再抛出任何异常.
2.仅抛出部分异常.
3.抛出父类方法抛出异常的子类型异常.
4.不可以抛出额外异常.
5.不能抛出父类方法抛出异常的父类型异常.
通常当一个方法使用throw抛出一个异常时,就需要在当前方法上使用throws定义该异常的抛出以通知调用者。只有RuntimeException及其子类异常抛出时可以不定义,否则必须定义。
1.2 当调用一个含有throws声明异常抛出的方法时,编译器要求必须有处理该异常的手段,没有则编译不通过。
* 处理手段有两种:
* 1:使用try-catch捕获并处理该异常
* 2:在当前方法上继续使用throws将该异常抛出。
异常的一些方法:e.printStackTrace();输出错误堆栈信息,有助于定位出错的代码以便调整程序错误。
String e.getMessage()获取错误消息,通常是该错误出现的原因。
1.3 自定义异常,通常是用来在项目中定义业务逻辑级别的错误。需要重写异常的全部构造方法以保证使用的方便性。
2.1 线程的简单理解:
多线程:多线程允许多段代码"同时"(并发)运行。
创建线程有两种方式
方式一:继承Thread并重写run方法。
例:class MyThread1 extends Thread{
public void run(){
//业务逻辑
}
}
注:这种创建线程的方式有两个不足:
1:由于java是单继承,这就导致继承了Thread就 不能再继承其他类。实际开发中会导致诸多不便。
2:由于将run方法重写,把线程要执行的任务代码定义在了run方法中,就导致该线程与任务有一个必然的耦合关系。不利于线程的重用。
方式二:实现Runnable接口单独定义任务。
例:class MyRunnable1 implements Runnable{
public void run() {
//业务逻辑
}
}
这种创建线程的方式弥补了不能继承其他类的缺点,使线程和业务逻辑分开。
以上两种方式均可以使用创建匿名内部类的方式进行创建。
启动线程调用start方法。不要直接调用线程的run方法。
当start方法执行完毕后,线程纳入线程调度,一旦该线程获取CPU时间片开始运行时会自动调用自己的run方法开始工作。
线程提供的静态方法:
static Thread currentThread()该方法可以获取运行该方法的线程.
static void sleep(long ms)该方法可以将运行当前方法的线程阻塞指定毫秒
通过线程可以获取到一些信息:
Thread t = Thread.currentThread();//获取运行main方法的线程
String name = t.getName();//获取线程名字
long id = t.getId();//获取线程ID(唯一标示)
int priority = t.getPriority();//线程优先级
boolean isAlive = t.isAlive();//线程活动状态
boolean isDaemon = t.isDaemon();//是否为守护线程
boolean isInterrupted = t.isInterrupted();//是否被中断
线程的优先级:线程优先级有10个等级,分别用整数1-10表示。其中1最低,10最高,5为默认优先级。
由于线程不能干涉线程调度工作,即:不能主动获取CPU时间,也不能决定时间片长短。所以只能通过调整优先级来最大程度改善获取CPU时间片的几率。理论上线程优先级越高的线程,获取CPU时间片的次数就越多。
守护线程:当一个进程结束时,所有在运行的守护线程会强制结束当一个进程中所有前台线程结束时,进程结束。所以通常会将可以一直运行的任务,但是当程序主要工作都结束时可以一起结束的任务放在守护线程上运行。
jack.setDaemon(true); //设置后台线程要在start之前设置
我是初学者,如有更新不好的,欢迎这位大神指出,谢谢大家!
更多精彩以后更新,转载注明!
java-异常处理和线程的一些简单方法及使用的更多相关文章
- JAVA中创建线程的三种方法及比较
JAVA中创建线程的方式有三种,各有优缺点,具体如下: 一.继承Thread类来创建线程 1.创建一个任务类,继承Thread线程类,因为Thread类已经实现了Runnable接口,然后重写run( ...
- Java中终止线程的三种方法
终止线程一般建议采用的方法是让线程自行结束,进入Dead(死亡)状态,就是执行完run()方法.即如果想要停止一个线程的执行,就要提供某种方式让线程能够自动结束run()方法的执行.比如设置一个标志来 ...
- Java中创建线程的三种方法以及区别
Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例.Java可以用三种方式来创建线程,如下所示: 1)继承Thread类创建线程 2)实现Runnable接口创建线 ...
- java中创建线程的3种方法
1.继承Thread类优点:可以直接使用Thread类中的方法,代码比较简单.缺点:继承Thread类之后不能继承其他类. 2.实现Runable接口优点:实现接口,比影响继承其他类或实现接口.缺点: ...
- Java修炼——暂停线程的四个方法
线程的获取方法:Thread.currentThread() 后面可以加上获取线程的名字 .getName() 这样就成功获取到了线程的名字. Sleep会导致当前线程休眠一定 ...
- java中创建线程的几种方法及区别
1,实现Runnable接口创建线程 特点: A:将代码和数据分开,形成清晰的模型 B:线程体run()方法所在的类可以从其它类中继承一些有用的属性和方法 C:有利于保持程序风格的一致性 2,继承Th ...
- Java实现定时任务的三种简单方法
第一种方法: /** * 先定义一个任务每天执行的时间点,再写一个死循环,不断地拿当前时间和事先定义的时间去比对,若到时间则执行任务 */ @Test public void test1() { St ...
- Java 多线程 - 创建线程的方法 + Executors.newXXXThreadPool()缺点
java中创建线程的三种方法以及区别: https://www.cnblogs.com/3s540/p/7172146.html 通过Executor 的工具类,创建三种类型的普通线程池: https ...
- JAVA中创建线程池的五种方法及比较
之前写过JAVA中创建线程的三种方法及比较.这次来说说线程池. JAVA中创建线程池主要有两类方法,一类是通过Executors工厂类提供的方法,该类提供了4种不同的线程池可供使用.另一类是通过Thr ...
随机推荐
- 基于云服务MRS构建DolphinScheduler2调度系统
摘要:本文介绍如何搭建DolphinScheduler并运行MRS作业. 本文分享自华为云社区<基于云服务MRS构建DolphinScheduler2调度系统>,作者: 啊喔YeYe . ...
- 《HALCON数字图像处理》第四章笔记
目录 第四章 HALCON数据结构 HALCON Image图像 图像通道 HALCON Region区域 Region的初步介绍 Region的点与线 Region的行程 Region的区域特征 H ...
- CabloyJS部署了一套演示站点
为了方便大家快速体验和了解CabloyJS的风格和特性,全新部署了一套演示站点.对于初次接触CabloyJS的开发者,不用下载新建项目,就可以直接体验CabloyJS了 在线演示 场景 链接/二维码 ...
- CSS 技术
浏览本篇文章前可以先看之前的前端网页介绍和html常用标签以便更容易理解 本文目录: 目录 CSS 技术介绍 CSS 语法规则 CSS 和 HTML 的结合方式 第一种: 第二种 第三种 CSS 选择 ...
- Flutter 实现“斑马纹”背景(需要变换颜色)
Flutter 实现"斑马纹"背景 由于工作中项目需求,需要将H5转换为Flutter代码. 其中的斑马纹背景需要根据接口返回的颜色来渲染,所以不能只是图片形式,无法通过decor ...
- Eclipse历史版本下载和选择对应的java版本
下载Eclipse 官网: https://www.eclipse.org/ 直达 直接进入连接:https://www.eclipse.org/downloads/packages/installe ...
- Python基础学习_03
程序的流程控制 1.程序的组织结构 (1)顺序结构 (2)选择结构 (3)循环结构 2.对象的布尔值 以下对象的布尔值为False False,数值0,None,空字符串,空列表,空元组,空字典,空集 ...
- SVN+Maven+Tomcat+Jenkins持续构建
一.准备工作 1.1安装软件 安装JDK.SVN.Maven.Tomcat.Jenkins及必要插件. 1.2安装jenkins所需插件 最开始安装jenkins时选择安装默认的插件. 其他插件: M ...
- RPA应用场景-信用卡交易争议后续流程
RPA应用场景-信用卡交易争议后续流程 场景概述 信用卡交易争议后续流程 所涉系统名称 客服系统,邮件 人工操作(时间/次) 4小时 所涉人工数量20操作频率 不定时 场景流程 1.RPA自动接收客户 ...
- FFT 学习笔记(自认为详细)
引入 什么是 \(\text{FFT}\) ? 反正我看到 \(\text{wiki}\) 上是一堆奇怪的东西. 快速傅里叶变换(英语:Fast Fourier Transform, FFT),是快速 ...