20175322 《Java程序设计》第十周学习总结
教材学习内容总结
- 进程与线程
- 线程:一个进程在执行中,可以产生多个执行线索,每条线索也有产生、存在和消亡的过程
- 进程:程序的一次动态执行过程中,从代码加载、执行至执行完毕的一个完整过程
- Java中的线程
- 多线程:一个应用程序中同时存在几个执行体,按几条不同的执行线索共同工作的情况
- 线程的周期:线程使用
Thread
类及其子类对象来表示线程 - 主线程:负责执行
main
方法 - 完整的生命周期:新建、运行、中断、死亡
- 新建:新建时就有了内存空间
- 死亡:执行完了run()方法中全部语句。或被提前强制性终止
- Thread类与线程的创建
- 用
Thread
类直接创建线程对象。Thread(Runnable target)
(该构造方法中的参数是一个Runnable
类型的接口) Thread
类的子类不能再扩展其他的类- 编写
Thread
类的子类时,需要重写父类的run()
方法 - 目标对象与线程的关系
- 目标对象和线程完全解耦。目标对象没有组合线程对象.目标对象经常需要通过获得线程的名字(因为无法获得线程对象的引用)以便确定是哪个线程正
在占用CPU资源,即被JVM正在执行的线程 - 目标对象组合线程(弱耦合)。目标对象可以组合线程.目标对象类组合线程对象时, 目标对象可以通过获得线程对象的引用
- 目标对象和线程完全解耦。目标对象没有组合线程对象.目标对象经常需要通过获得线程的名字(因为无法获得线程对象的引用)以便确定是哪个线程正
- 用
- 线程的常用方法
start();
线程调用该方法将启动线程,使之从新建状态进入就绪队列排队,一旦轮到它来享用CPU资源时,就可以脱离创建它的线程独立开始自己的生命
周期了run();
Thread类的run()方法与Runnable接口中的run()方法的功能和作用相同,都用来定义线程对象被调度之后所执行的操作,都是系统自动调用而用户程
序不得引用的方法sleep(int millsecond);
优先级高的线程可以在它的run()方法中调用sleep方法来使自己放弃CPU资源,休眠一段时间isAlive();
线程处于“新建”状态时,线程调用isAlive()
方法返回false
。在线程的run()
方法结束之前,即没有进入死亡状态之前,线程调用isAlive()
方法
返回true
currentThread();
该方法是Thread
类中的类方法,可以用类名调用,该方法返回当前正在使用CPU资源的线程interrupt();
一个占有CPU资源的线程可以让休眠的线程调用interrupt()
方法“吵醒”自己,即导致休眠的线程发生InterruptedException
异常,从而结束休
眠,重新排队等待CPU资源
- 线程同步
- 线程同步机制:当一个线程使用
synchronized
方法时,其他线程想使用这个synchronized
方法时就必须等待,直到前一个线程使用完该synchronized
方
法 - 若干个线程都需要使用一个
synchronized
(同步)修饰的方法,即程序中的若干个线程都需要使用一个方法,而这个方法用synchronized
给予了修饰,多个
线程调用synchronized
方法必须遵守同步机制
- 线程同步机制:当一个线程使用
- 协调同步的线程
wait()
方法可以中断方法的执行,使本线程等待,暂时让出CPU的使用权,并允许其它线程使用这个同步方法notifyAll()
方法通知所有的由于使用这个同步方法而处于等待的线程结束等待。曾中断的线程就会从刚才的中断处继续执行这个同步方法,并遵循“先中断先
继续”的原则notify()
方法只是通知处于等待中的线程的某一个结束等待
- 线程联合
- 一个线程A在占有CPU资源期间,可以让其它线程调用join()和本线程联合,如:B.join(); 称A在运行期间联合了B
GUI
线程- 计时器线程
- 守护线程
代码托管
感悟
- 本章内容较多,线程知识点有点难理解运用,之后还需要不断结合例子练习
- 做实验发现对于上周的数据库知识掌握不够,运用生疏,需要翻书查找资料巩固