随笔二(线程与异常)

### 多线程
1. Java默认是多线程的
2. Java至少存在两个线程,一个执行main()的主线程,还有一个后台线程gc()即垃圾回收线程;
3. 虽然每个线程有默认优先级,但不建议手动修改线程优先级。
4. Java属于抢占式模式
5. 线程执行与否由CPU决定,调度器调度时是不靠谱的,优先级高不一定会执行,随机的,优先级高只是执行的概率高一点,但并不能保证执行,看运气
6. 多线程并不能节省线程运行时间,但能提高CPU的使用率,进而提高了程序的执行效率。
7. 单线程模式需要从上往下执行线程,当某个线程被阻塞时,后面的线程无法执行,都需要等待,而多线程执行过程中某个线程被阻塞时执行其他线程,不会让CPU空闲,能充分利用CPU。提高程序效率的关键是充分利用CPU不让他空闲。
8. 或者多核CPU时,能同时运行多个线程,真正意义上的并发,此时效率比单线程快
9. 同步方法使用要注意,
10. while(判断条件){
  同步方法(){}
12. 
13. }
14. 一定要在同步方法里再次判断下while的判断条件,因为无法保证在同步方法里更改后另一个线程还满足判断条件
15. 比如判断条件为票数>0,当两个线程同时进入时,A线程执行完同步方法后,票数小于0了,这时B线程已经进入了while等待执行同步方法了


### 线程与异常
1. 子线程无法抛异常,只能try不能throws,因为子线程继承自父类的run方法,而父类的run方法没有抛异常,所以子类无法抛异常。
2. main方法可以抛异常。
3. 线程的run方法不能抛出任何编译时异常,但是,运行时异常出现会导致线程死亡。


###CPU与线程
1. 虽然Java线程说是并发执行,但实际上并不一定
2. 在单核CPU中不存在并发,一个CPU不可能同时执行多个任务,只有多核的CPU才可以,但单核CPU中,因为执行过程中,
3. CPU在各个线程中快速切换,切换速度极快,给人感觉上是同时执行的,是并发的。其实是异步的,每个线程执行一会儿,切换执行。
4. 我们设计程序时,假设是并发的。(真正意义上的并发,同时执行)


### 进程和线程概念
* 什么是进程
* 一个正在运行的程序就是一个进程。 


* 什么是线程
* 进程中的一个独立的执行路径。


* 线程的分类
* 单线程:只有一条执行路径,同一时间只能做一件事情。
* 多线程:有多条执行路径,同一个时间可以干多件事情。


* 进程和线程的举例
* 工厂:进程
* 工人:线程


* 公路:进程
* 车道:线程


* 进程和线程的作用
* 线程:用来执行代码的
* 进程:用来封装线程并为线程提供资源。


### 开启线程之继承Thread
* 步骤
* 定义一个类继承Thread
* 重写run方法,将线程要执行任务的代码写在run方法中
* 创建子类对象,调用start方法开启线程。


### 主线程和子线程的概念
* 什么是主线程
* Java程序启动时自动创建的并执行main方法的线程就称为主线程(老板)
* 主线程的执行路径
* 从main方法开始直到main方法执行结束。


* 什么是子线程
* 除了主线程以外的所有线程都称为子线程。


* 子线程的执行路径
* 从run方法开始直到run方法执行结束。


### 线程的运行模式
* 线程是由CPU负责调度执行。
* 运行模式
* 分时式模式
* 每一个线程平均分配CPU的使用权。
* 抢占式模式
* 优先级高的线程使用CPU的时间长一点,如果优先级相同,则系统会随机选择一个线程来执行,Java线程是属于抢占式模式。


### 多线程提高运行效率原因(多线程的优点)
* 提高了CPU的使用率。
* 提供了程序的执行效率。


### 多线程内存图解
* 每个线程都有自己独立的栈空间。


### 多线程内存图解
* 每个线程都有自己独立的栈空间。


### 线程常用方法
* String getName();
* 获得线程名称,默认值是Thread-序号。
* void setName(); 
* 设置线程名称
* static Thread currentThread();
* 获得当前方法执行所在的线程对象


* static void sleep(long millis) 
* 让线程休眠指定的毫秒值


### 线程的状态(面试题)
* 新建:刚刚创建出来
* 就绪:调用start()
* 运行:被CPU调度执行到
* 阻塞:调用sleep或wait方法
* 死亡:任务执行完成或调用stop方法或者未捕获异常而终止了线程导致意外死亡。stop方法已经过时,不要调用。stop方法不安全。


### 线程安全问题
* 线程安全的概念
* 多个线程同时操作一个数据资源,仍然能得到正确的结果则称为线程安全。


* 线程安全的案例
* 火车站卖票案例


### 同步代码块解决线程安全问题
* 同步代码块的格式
synchronized(锁对象){
// 操作共享资源的代码
}


* 同步代码块的原理
* synchronized能够保证同一时间只有一个线程执行代码块或方法中的代码




* 锁对象的注意事项
* 锁对象可以是任意类型的对象。
* 所有线程对象必须共用一个锁对象。锁对象必须被所有线程共享。
* 最好作为锁对象的东西一般都是线程共用的,独一无二的
* 使用同步代码块的时候,最好将锁对象定义为static 否则容易出现因为两个线程创建的对象不是同一个,而锁也是2个不同的情况锁不住


### 同步方法解决线程安全问题
* 同步方法的格式
修饰符 synchronized 返回值类型  方法名(参数列表) {
}


* 非静态同步方法也有锁对象
* 锁对象是:this


* 静态同步方法也有锁对象
* 锁对象是:类名.class


### 常见面试题
* start和run方法的区别
* start方法会开启线程,在新线程中执行任务。
* start内部会触发run方法的执行。
* run方法不会开启线程,当前线程执行任务。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值