20165207 第八周学习总结
教材内容与问题解决
-
教材p361页的程序包含两个无限循环,这个程序在idea中不能够编译通过,提示有“到不了”的语句
,然后在idea的命令行里尝试编译也有相同的错误提示
或许,执行这个程序时,java的多线程机制让输出间隔地显示一堆的“你好”和“hello”,只是一个合情的推理或者在低版本的JDK中才能够实现的操作。啊,不,不对,我觉得就是不行,具体内容写在了下面序号3里面。 -
输入本章第一个例子的代码,我的运行结果乍一看就好像这三组东西是分别做的,完全不像教材上“主人、轿车、大象、轿车”穿插在一起。仔细观察我的结果,后面还是有能够体现我的程序中的多线程机制的地方的
,我觉得这正好印证了教材中364页说的“上述程序在不同的计算机运行或在同一台计算机反复运行的结果不尽相同,输出结果依赖当前CPU资源的使用情况”。 -
下面是我参考364页的提示将循环控制都改成true变成无限循环(没有出现361页无法执行编译不通过的问题)之后的输出结果
。我有了一个想法:这个之所以编译能够通过,是因为三个无限循环是在不同的三个线程里。所以,361页的关于两个while的无限循环的解释我觉得并不合理,因为这两个while实际是在一个线程(主线程)中的,这就意味着JVM根本就不会像切换线程一样给同一个线程里面的两个无限循环的while进行切换。换句话讲:第二个while在啥版本的JDK里我觉得都没有办法被执行,都是Unreachable的。以上关于教材内容的思考,仅代表我自己的看法。 -
使用Thread类直接创建线程可以自动执行run()方法,这样创建线程时传入的目标对象(参数)务必是实现了Runnable接口的类所创建的对象。并且使用这种方法比前者更具灵活性,传入的目标对象可以是某个特定类的子类。
-
我们用的jdk9中,sleep方法传入的参数是long型
-
用目标对象创建线程时,如果采取目标对象组合线程即弱耦合的方式,可以通过直接调用currentThread()方法了解现在的占用资源的线程。这样就可以不用像完全解耦时要setName再getName才能够知道当前的线程。
-
377-378页例子9中,ThreadJoin中不含有顾客线程二者为完全解耦的关系,所以在ThreadJoin中判断顾客线程要使用getName而在后面的分支里只判断joinThread线程的引用就可以。
-
用wait方法协调同步的进程与使用join方法与本线程联合这两种机制能够产生类似的效果。我目前通过例子8和例子9理解二者的区别在于:协调同步的进程时进程之间类似于一种并列的关系,而一个线程联合另一个线程时二者之间是一种存在交互的关系。
代码托管
码云链接
脚本运行截图
错题总结
- 第5题,属于常用数据库的包含Oracle ,之前我觉得那只是个公司的名字。
- 第15题,Rowset接口中的update方法是用来填充数据区的。
- 第16题,ResultSet中用于Cursor定位的方法没有isBeforeFirst
- 第17题,executeUpdate返回的类型是int,代表的含义是受影响的记录。