20175209 《Java程序设计》第十周学习总结
一、教材知识点总结
Java中的线程
- 多线程:一个应用程序中同时存在几个执行体,按几条不同的执行线索共同工作的情况
- 线程的周期:线程使用Thread类及其子类对象来表示线程
状态与生命周期
-
新建:新建时就有了内存空间
-
运行:调用start();方法通知JVM,排队等候切换线程。如果使用Thread的子类创建的,需要重写run();方法。
-
中断:
- JVM将CPU切换给其他线程
- 线程在使用CPU资源的时候,使用了sleep(int millsecond)方法,使当前线程进入休眠状态。一旦执行sleep方法,则立即进入休眠状态,在等待指定的秒数后,重新进入线程队列中排队等待CPU资源
- 线程在使用CPU资源的时候,使用了wait()方法,需要其他线程调用notify()方法,使它进入等待CPU资源的状态,以便从中断初继续进行
- 线程在使用CPU资源的时候,执行某个操作进入阻塞状态
-
死亡:执行完了run()方法中全部语句。或被提前强制性终止。
Thread类与线程的创建
- 使用Thread的子类, 需要重写父类的run()方法
- 用Thread类直接创建线程对象。
Thread(Runnable target)(参数是一个Runnable类型的接口)
线程的常用方法
start()
线程调用该方法将启动线程run()
Thread类的run()方法与Runnable接口中的run()方法的功能和作用相同,都用来定义线程对象被调度之后所执行的操作,都是系统自动调用而用户程序不得引用的方法sleep(int millsecond)
优先级高的线程可以在它的run()方法中调用sleep方法来使自己放弃CPU资源,休眠一段时间isAlive()
线程处于“新建”状态时,线程调用isAlive()方法返回false。在线程的run()方法结束之前,即没有进入死亡状态之前,线程调用isAlive()方法返回truecurrentThread()
该方法是Thread类中的类方法,可以用类名调用,该方法返回当前正在使用CPU资源的线程interrupt()
一个占有CPU资源的线程可以让休眠的线程调用interrupt()方法“吵醒”自己,即导致休眠的线程发生InterruptedException异常,从而结束休眠,重新排队等待CPU资源。
协调同步的线程
wait()
中断方法的执行,使本线程等待,暂时让出CPU的使用权,并允许其它线程使用这个同步方法notifyAll()
通知所有的由于使用这个同步方法而处于等待的线程结束等待。曾中断的线程就会从刚才的中断处继续执行这个同步方法,并遵循“先中断先继续”的原则。notify()
只是通知处于等待中的线程的某一个结束等待。
二、教材学习中的问题和解决过程
-
问题1:在运行例子12.1时,发现在IDEA中运行的结果基本上都是一样的,很少出现不同线程的情况,和书上所说的每次线程运行的都不同有很大的区别;并且运行时,总是先执行主进程再其他进程的问题
-
解决办法:在IDEA的终端下运行时可以避免这个问题,每次的得到的结果基本不一样,可以实现书上所描述的结果,但直接运行时为什么会出现上述情况暂时还没有解决
-
问题2:在运行例子12.4时出发现会随机出现以下情况
-
连续出现文字或数字
-
出现文字和数字的顺序颠倒
-
正常情况
-
-
解决办法:在观看了视频中详细的讲解后学习到了时因为线程执行的随机顺序导致的,不同情况原因如下:
- 连续出现文字或数字:先执行dog线程的输出语句,再执行cat线程的输出语句,执行dog线程的减变量操作并输出,执行cat线程的减变量操作并输出
- 出现文字和数字顺序颠倒的情况:先执行dog线程的输出语句,再执行cat线程的输出语句,执行cat线程的减变量操作并输出,执行dog线程的减变量操作并输出
- 正常情况:先执行dog线程的输出语句,执行dog线程的减变量操作并输出,再执行cat线程的输出语句,执行cat线程的减变量操作并输出
三、上周错题总结
- 1.JDBC编程的异常类型分为
A.SQLException
B.SQLError
C.SQLWarning
D.SQLFatal
E.SQLTruncation
正确答案: A C
- 关于 Connection 的描述,何者正确?
A.可以从 DriverManager 上取得 Connection
B.可以从 DataSource 上取得 Connection
C.在方法结束之后 Connection 会自动关闭
D.Connection 是线程安全( Thread-safe)
正确答案: A B
- 哪些 JDBC 驱动程序可以有跨平台的特性?
A.TYPE 1
B.TYPE 2
C.TYPE 3
D.TYPE 4
正确答案: C D
四、代码托管
五、脚本运行截图
六、学习进度条
代码行数(累计总数) | 博客量 | 学习时间 | |
---|---|---|---|
目标 | 8000 | 40 | 300 |
第一周 | 19 | 1 | 12 |
第二周 | 309 | 2 | 15 |
第三周 | 740 | 3 | 10 |
第四周 | 1468 | 4 | 10 |
第五周 | 1922 | 8 | 8 |
第六周 | 3290 | 10 | 15 |
第七周 | 4183 | 12 | 10 |
第八周 | 5211 | 15 | 7 |
第九周 | 5745 | 20 | 9 |
第十周 | 7236 | 23 | 9 |