20165214 第八周学习任务

学号 2017-2018-2 《Java程序设计》第八周学习总结

教材学习内容总结

  • 12.1 进程与线程。线程比进程还小,一个进程的进行期间能够产生多个线程。
  • 12.2 Java的多线程机制。Java内置对多线程的支持。咱们的计算机在任何给定说的时刻只能执行线程中的一个,Java虚拟机只是从一个线程迅速地切换到另外一个线程。
    • 当main方法中有其余线程时,JVM一直要等到Java应用程序中的全部线程都结束后才会结束Java应用程序。
    • Java语言使用Thread类及其子类的对象来表示线程。新建的线程通常要经历4个状态:
      ① 建立Thread对象;
      ② 在第一步建立对象后,该对象仅仅拥有内存次元,须要再调用start()方法才能使得其成为新线程。若是这个线程是Thread的对象,类中的run()方法就马上执行,且程序必须在子类中重写run()方法。注意,线程没有结束run()方法以前,不要让线程再调用start()方法,不然抛出IllegalThreadStateException异常。
      ③ 线程中断:切换给其余线程;执行了sleep(int time)方法,通过time毫秒后,该线程就从新排队,以便从中断处继续运行;执行了wait()方法,线程进入等待状态,此时,其余线程调用notify()方法来使得在等待状态的线程从新排队以便从中断处继续运行;执行某个操做进入阻塞状态时不能进入排队队列。
      ④ 线程有两种缘由会“死亡”,一是正常运行完了该线程的所有工做;二是run()方法被强制结束。当一个线程“死亡”以后,未死亡的线程会继续轮流占用CPU。
    • 线程是能够设置优先级的(使用setPriority()方法),当优先级高的线程执行完毕时,才会执行低优先级的线程。可使用getPriority()方法来得到线程的优先级,优先级只能在1~10之间。
  • 12.3 Thread类与线程的建立。
    • 可使用Thread类或者子类建立线程对象,注意子类必须重写run()方法,同时子类能够增长新的成员变量、方法使线程有具体的功能。
    • 若目标对象与线程彻底解耦(建立目标对象的列不包含对线程对象的引用),目标对象可使用String name=Thread.currentThread().getName();来得到当前使用CPU资源的线程名字;若目标对象组合线程,则目标对象可使用String name=Thread.currentThread();来得到当前使用CPU资源的线程引用。
    • 若是在目标对象中有对其中某个线程进行了“睡眠”处理,那么在计算机运行程序的时候,能够会具备不一样的结果。由于线程的进行若是到达指定毫秒数尚未运行完run()方法,那么会先中止,等到睡眠时间结束后再接着运行。
  • 12.4 线程的经常使用方法
    • start()方法:只有新建立的线程才能够调用该方法。
    • run()方法:该方法是否运行结束是判断线程是否结束的一个重要标准。只有当该方法运行结束后,线程才能再次调用start()方法。
    • sleep(int millsecond)方法:线程能够调用该方法来使程序进入睡眠,知道过了参数指定的秒数事后才“醒来”。该方法必须在try-catch语句中调用,由于线程若是在休眠中被打断,会抛出InterruptedException异常。
    • isAlive()方法:该方法用来判断线程是否正在运行,如果,返回true,若不是,返回false。注意,一个已经运行的线程在没有进入死亡状态时,不要再给线程分配实体。
    • currentThread()方法是Thread类中的类方法,返回当前使用CPU的线程。
    • interrupt()方法用来“唤醒”调用sleep方法而处于睡眠状态的线程。
  • 12.5 线程同步:若是有若干个线程须要同时使用一个方法,为了避免出现混乱,可使用synchronized进行修饰。这样一来,该方法只能轮流被调用,直到正在调用该方法的线程使用完该方法后,其余线程才能够调用该方法。
  • 12.6 协调同步的线程:当一个线程使用的同步方法中用到了某个变量,而此变量又须要其余线程修改后才能符合本线程的要求,则可使用wait()方法来中断线程的执行,并容许其余线程使用这个同步方法(sleep方法是作不到这个功能的)。如有线程在运行同步方法时不须要等待,那么须要在用完方法的同时应用notifyAll()方法来通知其余全部处于等待的线程结束等待。只有在同步线程中才可使用wait(),notify(),notifyAll()方法
  • 12.7 线程联合:线程A在其运行期间,若是其余线程B调用了join()方法和线程A联合,那么A线程会立马中断,直到B线程运行结束A线程才会从新排队。若B线程已经结束,调用join()方法则不会有任何效果。
  • 12.8 GUI线程:Java包含GUI(图形用户界面)时,会启动多个线程。
  • 12.9 计时器线程:Java中的javax.swing包中的Timer类能够用来建立计时器:Timer(int a,Object b);,a为毫秒,b为监视器(监视器必须是组件类),每隔a毫秒会执行b一次。注意java.util包中也有一个名字是Timer的类,使用类名时须要注意避免混淆。
  • 12.10 守护线程:线程默认是非守护线程,线程在运行以前必须设置本身是否为守护线程。能够调用voidsetDaemon(boolean on)来将本身设置成一个守护线程。当全部非守护线程运行结束时,守护线程必定会跟着结束。

教材学习中的问题和解决过程

  • 问题1:教材中本章后面的内容涉及到了一些组件、按钮等,使得我在看程序的时候,看得不是很明白
  • 问题1解决方案:尚未解决,等以后学习了组件、按钮事后要再回过头来看这些程序。

代码调试中的问题和解决过程

  • 问题1:在计时器线程这一小节的时候提到过,除了javax.swing类,java.util也有一个Timer类,要避免在使用它们时出错。因而在敲Example12_12代码的时候,我把里面的import java.util.Date;换成了import java.util.*;想让他们冲突看看会有什么样的后果。
  • 问题1解决方案:惋惜换了以后仍是没有冲突。。不知道怎么样才会产生冲突呢?

代码托管

上周考试错题总结

  • 错题1:
    html

  • 错题1理解:populate只是用来写入对象的数据。
  • 错题2:
    java

  • 错题2理解:select并非数据操做语言git

结对及互评

  • 本周结对学习状况
    • 结对照片
      数据库

    • 结对学习内容
  • 上周博客互评状况

其余

本周的学习包括两方面的内容,一个是把上周的数据库的内容给完善了,另外一个是学习了Java的多线程机制。
一直以来,跟着娄老师的学习要求来走,明显感受到了本身的学习能力有着很大的提高,特别是抓要点和总结知识的能力。从此也会继续按照娄老师的要求好好作,让本身的Java水平不断提升~编程

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积)
目标 5000行 30篇 400小时
第一周 36/36 1/1 8/8
第二周 432/468 2/3 15/23
第三周 964/1432 1/4 16/39
第四周 725/2157 1/5 14/53
第五周 1428/3585 3/8 18/71
第六周 1323/4908 1/9 17/88
第七周 960/5868 3/12 22/110
第八周 993/6861 2/14 23/133
  • 计划学习时间:22小时多线程

  • 实际学习时间:23小时学习

相关文章
相关标签/搜索