教材知识总结
第12章 Java多线程机制
进程与线程
- 进程是程序的一次动态执行进程,它对应了从代码加载、执行至执行完毕的一个完整过程
- 线程不是进程,一个进程在其执行过程中,会产生多个线程,线程间可以共享进程中的代码和数据。
- 没有进程就没有线程
多线程
- 多线程是指一个应用程序中同时存在几个执行体,按几条不同的执行线索共同工作的情况。
- 计算机只能执行多个线程中的一个,java虚拟机快速的把控制从一个线程切换至另一个线程。
- JVM一直要等到java应用程序中的所有线程都结束,才结束java应用程序
线程的状态与生命周期
- 新建:当一个Thread类或者其子类的对象被声明并创建时,线程对象处于新建状态,有了相应的内存空间和其他资源
- 运行:调用
start()
方法进行排队,调用run()
方法立刻执行 - 中断
- 死亡:一个正常运行的线程正常完成了他的全部工作或者被提前强制性终止、
java中的线程调度器负责管理线程,线程的优先级通过````setPriority(int grade)```方法调整。
Thread类及其子类与线程的创建
- 编写Thread类的子类时,需要重写
run()
方法 - Thread创建线程通常使用构造方法:
Thread(Runnable target)
目标对象与线程的关系
- 目标对象和线程完全解耦:目标对象通常需要获得线程的名字
String name = Thread.currentThread().getName();
- 目标对象组合线程(弱耦合):目标对象通常需要获得线程的引用
Thread.currentThread();
线程的常用方法
start()
run()
sleep(int millsecond)
参数millsecond是以毫秒为单位的休眠时间,如果线程在休眠时被打断,JVM就会抛出InterruptedException异常isAlive()
返回true或者falsecurrentThread()Thread
类中的类方法,可以用类名调用interrupt()
吵醒休眠的线程
线程同步
- 线程同步:若干个线程都需要使用一个synchronized方法
- 线程同步机制:当一个线程A使用同步方法时,其他线程想使用这个同步方法时就必须等待
线程联合B.join();
- 计时器线程
Timer(int a,Object b)
创建一个计时器 - 守护线程
thread.setDaemon(true)
可以将自己设置成一个守护线程
教材学习中遇到的问题
问题一
- 问题:多个线程抢cpu,该怎么决定谁先谁后?
- 解决方案:因为线程的优先级只有1,5,10.当没有设置优先级的时候,默认优先级为5。所以是随机的,但是我们可以控制
问题二
- 问题:如何实现多线程并发执行?
- 解决方案:当机器有多个CPU,JVM就能充分利用它,实现并发执行
代码调试过程中遇到的问题
- 问题1:在敲自己编的代码时,提示java.lang.ArrayIndexOutOfBoundsException
- 问题1解决方案:出现该问题是因为数组出现了越界。经过检查后发现我在程序中访问了一个大于数组长度的位置
代码托管
https://gitee.com/shengmaosong/java-besti-20175316/tree/master/src
学习感受
本周给自己打分:70分!仍需继续努力!
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第十周 | 2800/3000 | 40/50 | 360/400 |