第八周学习总结

20165227 2018-4 《Java程序设计》第八周学习总结

教材学习内容总结

第十二章

  • Thread类:在编写Thread类的子类的时候,需要重写父类的run()方法,其目的是规定线程的具体操作,否则线程什么都不做,因为父类的run()方法中没有任何操作语句
  • 使用Thread类子类创建线程:在main方法中创建和启动线程,然后在Thread子类中重写run()方法,规定具体操作。结果按照main线程、子类线程的顺序实行
public class SpeakCar extends Thread {
   public void run() {
   } 
}
  • 使用Thread类直接创建线程:使用构造方法Thread(Runnable target)来创建;该构造方法中的参数是一个Runnable类型的接口
public class ElephantTarget implements Runnable {
   public void run() {
   } 
}
  • 目标对象与线程的关系:
  • 完全解耦:创建目标对象中并没有不包含对线程对象的引用,需要使用String name = Thread.currentThread().getName();
  • 弱解耦:当创建目标对象的类组合线程对象时,目标对象可以通过获得线程对象的引用 Thread.currentThread(); 在创建目标对象的类中声明
   House() {
      dog=new Thread(this);  //当前House对象作为线程的目标对象 
      cat=new Thread(this); 
   }
  • run方法在程序执行的过程中可以多次启动

  • 线程的常用方法;

    • start()启动线程;
      sleep(int millsecond) 休眠线程;
      isAlive() 判断当前线程的状态,false or true;
      currentThread() 返回当前正在使用的线程;
      interrupt() 唤醒处于休眠的线程
  • 线程同步:需要使用用synchronized 修饰的方法
    public synchronized void saveOrTake(int amount) { }

  • 线程联合:join() 方法

  • GUI线程:AWT-EventQuecueAWT-Windows 两个重要的线程

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

  • 问题1:一个线程的run()方法的执行过程中为什么随时可能被强行中断
  • 问题1解决方案:通过教材的学习,了解到这个跟JVM的轮流执行线程的机制有关,在执行一个线程的时候会遇到比如System.out.println("线程执行"); 时候会中断对CPU的使用权
  • 问题2:GUI是什么?
  • 问题2解决方案:参考百度:GUI

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

  • 问题1:在编译教材中的代码的时候出现IllegalThreadStateException异常 的提示

  • 问题1解决方案:通过反复检查和结合教材的知识,了解了不能在线程没有结束run()方法之前调用start()方法,否则就会出现这样的错误提示

  • 问题2:运行教材代码出现两行相同的时间

  • 问题2解决方案:代码中,在一个已经运行的线程还没有进入死亡状态之前,给其再次分配了实体,导致先前的实体成为了不能收集掉的“垃圾”,但依旧会被JVM认为正在运行,所以产生了错误

代码托管

上周考试错题总结


其他(感悟、思考等,可选)

在这一周的学习中知道了Java的多线程运行,同时也复习了接口、父类子类等之前的知识点,发现对于Java的学习已经开始融会贯通了,所以对于之前的知识就更不能懈怠,需要不断的温习才行

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 210/210 1/1 20/20
第二周 240/450 1/2 18/38
第三周 496/946 1/3 22/60
第四周 624/1570 1/4 30/90
第五周 843/2413 1/5 24/114
第六周 733/3146 1/6 20/134
第七周 628/3774 1/7 21/155
第八周 1103/4877 1/8 30/185
posted @ 2018-04-22 16:35  朱越  阅读(192)  评论(0编辑  收藏  举报