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 ...
随机推荐
- 一次XGBoost性能优化-超线程影响运算速度
一.问题背景 一个朋友在使用 XGBoost 框架进行机器学习编码,他们的一个demo, 在笔记本的虚拟机(4核)运行的时候,只要8s, 但是在一个64核128G 的物理机上面的虚拟机去跑的时候,发现 ...
- MTK 虚拟 sensor bring up (pick up) sensor1.0
pick up bring up sensor1.0 1.pick up对比 2.SCP 1.添加驱动文件 2.添加编译环境(打开开关) 注:编译过程中如果显示内存不够 3.修改底层数据上报方式 3. ...
- Kubernetes client-go DeltaFIFO 源码分析
概述Queue 接口DeltaFIFO元素增删改 - queueActionLocked()Pop()Replace() 概述 源码版本信息 Project: kubernetes Branch: m ...
- 看看CabloyJS是如何实现编辑页面脏标记的
应用场景 我们在使用Word.Excel时,当修改了内容之后在标题栏会显示脏标记,从而可以明确的告知用户内容有变动.此外,如果在没有保存的情况下关闭窗口,系统会弹出提示框,让用户选择是否放弃修改 那么 ...
- BUUCTF-N种方法解决
N种方法解决 这题提供的是一个key.exe 运行一下发现没办法运行,老办法,放到16进制打开看看. 这个data:image/jpg很明显了,base64转图片. 编码完成得到了一张二维码,再将得到 ...
- Javaweb-在idea中配置Tomcat
解决警告问题 为什么会有这个问题:我们访问一个网站,需要制定一个文件夹名字 最后点OK,Tomcat就亮起来了 运行成功弹出界面:
- openssl客户端编程:一个不起眼的函数导致的SSL会话失败问题
我们目前大部分使用的openssl库还是基于TLS1.2协议的1.0.2版本系列,如果要支持更高的TLS1.3协议,就必须使用openssl的1.1.1版本或3.0版本.升级openssl库有可能会导 ...
- Python教程:执行cmd命令
我们通常可以使用os模块的命令进行执行cmd 方法一:os.system def system(*args, **kwargs): # real signature unknown "&qu ...
- CANN算子:利用迭代器高效实现Tensor数据切割分块处理
摘要:本文以Diagonal算子为例,介绍并详细讲解如何利用迭代器对n维Tensor进行基于位置坐标的大批量数据读取工作. 本文分享自华为云社区<CANN算子:利用迭代器高效实现Tensor数据 ...
- WPF双滑块控件以及强制捕获鼠标事件焦点
效果 概述 最近有个小需求要用双滑块表示一个取值范围,于是就简单做了个用户控件,在此记录下. 使用矩形Rectangle表示范围,椭圆Ellipse表示滑块,使用Canvas控制滑块的左右移动. 椭圆 ...