• 20175234 2018-2019-2 《Java程序设计》第十周学习总结


    20175234 2018-2019-2 《Java程序设计》第十周学习总结

    教材学习内容总结

    12.1进程与线程

    • 进程:程序的一次动态执行过程中,从代码加载、执行至执行完毕的一个完整过程。
    • 线程:一个进程在执行中,可以产生多个执行线索,每条线索也有产生、存在和消亡的过程。

    12.2 Java中的线程

    • 多线程:一个应用程序中同时存在几个执行体,按几条不同的执行线索共同工作的情况
    • 线程的周期:线程使用Thread类及其子类对象来表示线程


    (图片参考JAVA多线程常见的十大问题)

    • 新建:新建时就有了内存空间

    • 运行调用start();方法通知JVM,排队等候切换线程。如果使用Thread的子类创建的,需要重写run();方法。

    • 中断:
      ①JVM将CPU切换给其他线程
      ②线程在使用CPU资源的时候,使用了sleep(int millsecond)方法,使当前线程进入休眠状态。一旦执行sleep方法,则立即进入休眠状态,在等待指定的秒数后,重新进入线程队列中排队等待CPU资源
      ③线程在使用CPU资源的时候,使用了wait()方法,需要其他线程调用notify()方法,使它进入等待CPU资源的状态,以便从中断初继续进行。
      ④线程在使用CPU资源的时候,执行某个操作进入阻塞状态。

    • 死亡:执行完了run()方法中全部语句。或被提前强制性终止。

    12.3 Thread类与线程的创建

    • 使用Thread的子类, 需要重写父类的run()方法。
    • 用Thread类直接创建线程对象。Thread(Runnable target)(该构造方法中的参数是一个Runnable类型的接口。)
    • 目标对象与线程的关系
      • 目标对象和线程完全解耦。目标对象没有组合线程对象.目标对象经常需要通过获得线程的名字(因为无法获得线程对象的引用)以便确定是哪个线程正在占用CPU资源,即被JVM正在执行的线程。
      • 目标对象组合线程(弱耦合)。目标对象可以组合线程.目标对象类组合线程对象时, 目标对象可以通过获得线程对象的引用。

    12.4 线程的常用方法

    • 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资源。

    12.5 线程同步

    当两个或多个线程同时访问同一个变量,并且一个线程需要修改这个变量。
    在处理线程同步时,要修改数据的方法用关键字synchronized来修饰。

    12.6 协调同步的线程

    • wait()方法可以中断方法的执行,使本线程等待,暂时让出CPU的使用权,并允许其它线程使用这个同步方法。
    • notifyAll()方法通知所有的由于使用这个同步方法而处于等待的线程结束等待。曾中断的线程就会从刚才的中断处继续执行这个同步方法,并遵循“先中断先继续”的原则。
    • notify()方法只是通知处于等待中的线程的某一个结束等待。

    12.7 线程联合

    一个线程A在占有CPU资源期间,可以让其它线程调用join()和本线程联合,如:B.join(); 称A在运行期间联合了B。

    12.8 GUI线程

    12.9 计时器线程

    12.10守护线程

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

    • 问题1:关于多线程的问题,每次运行结果不一致,例如图

    • 问题1原因:每次输出的结果不尽相同,是由于当前CPU 资源的使用情况。存在,抢占CPU资源的情况。

    • 问题2

    • 问题2原因:JVM的轮流执行线程的机制。暂无解决措施,等我研究完…

    代码托管

    上周考试错题总结

    • 相关知识点:JDBC 驱动的四种类型 :①JDBC-ODBC Bridge Driver②Native API Driver③JDBC-Net Driver④Native Protocal Driver。

    资料来源:百科JDBC驱动程序

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 51/51 1/1 12/20 Java的重要起步
    第二周 460/511 2/3 30/32 Java的简单语句学习
    第三周 803/1314 2/5 25/57 Java的基础学习
    第四周 485/1699 1/6 20/77 Java的子类与继承
    第五周 393/2092 1/7 20/97 Java的接口与实现
    第六周 156/2321 2/9 18/115 内部类和异常类、输入输出流
    第七周 1225/3546 2/11 20/135 常用类及方法
    第八周 487/4032 2/13 20/155 泛型与集合框架
    第九周 843/5105 2/15 12/167 JDBC与MySQL数据库
    第十周 910/6015 3/18 10/177 Java多线程机制

    参考资料

  • 相关阅读:
    Android 系统广播机制
    NBUT 1457 Sona (莫队算法)
    内存分配--静态内存、栈和堆
    Hibernate主键生成策略
    UVA 1482
    servlet开篇
    C语言的代码内存布局具体解释
    Mirantis Fuel fundations
    openstack中文文档
    C++ 之再继续
  • 原文地址:https://www.cnblogs.com/ysz-123/p/10809413.html
Copyright © 2020-2023  润新知