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

教材学习内容总结

  • 进程与线程

    • 线程不是进程,但其行为很像进程,线程是比进程更小的执行单位。
    • 与进程不同,线程的中断与恢复可以更加节省系统的开销。
  • java中的线程
    • java语言的一大特点就是内置对多线程的支持。
  • 线程的状态和生命周期:
    • 新建:java语言使用Thread类及其子类的对象被声明并创建时,新生的线程对象处于新建状态。
    • 运行和阻塞:当就绪状态的线程获取了CPU执行片的之后,就进入运行状态,但是在执行过程中,可能会因为以下原因使线程进入阻塞状态
      • CPU执行片已经用完,JVM切换到其他线程执行
      • 线程调用sleep()
      • 线程调用了阻塞IO方法,该方法返回之前,线程会一直阻塞
      • 线程试图获取被其他线程持有的同步监视器
      • 线程在等待某个通知
      • 程序调用了线程的suspend()将线程挂起。(容易死锁,不推荐)
    • 线程从运行进入阻塞状态之后,接着只能继续阻塞或者再次进入就绪状态,下面情况会使线程由阻塞状态重新进入就绪状态,
      • 线程调用的slee()经过了指定时间
      • 线程调用的阻塞IO方法返回
      • 线程成功获取同步监视器
      • 线程收到其他线程发出的通知
      • 被挂起(suspend)的线程又被程序调用了resume方法
    • 死亡:线程结束后就处于死亡状态,线程会以如下三种方式结束,
      • run()或call()正常执行完成,线程正常结束
      • 线程抛出一个未捕获的Exception或Error
      • 直接调用线程的stop()方法结束线程,容易死锁
      • 注意,子线程一旦启动,其地位和主线程是一样的,所以一旦主线程结束了,子线程不会受影响,不会跟着结束线程对象的isAlive()方法在就绪,运行,阻塞时返回true,在新建,死亡时返回false对已经死亡的线程调用start()是无效的,会抛出异常。 死亡的线程不可再次作为线程来执行。对于新建的线程,调用两次start()方法也会抛出异常
  • Thread类与进程的创建
    • 所有JAVA线程都必须是Thread或其子类的实例。方法如下:

      • 定义Thead子类并实现run()方法,run()是线程执行体
      • 创建此子类实例对象,即创建了线程对象
      • 调用线程对象的start()方法来启动线程
  • 线程的常用方法:

    1. start() : 线程调用该方法将启动线程,使之从新建状态进入就绪队列排队,一旦轮到它来享用CPU资源时,就可以脱离创建它的线程独立开始自己的生命周期了。
    2. run(): Thread类的run()方法与Runnable接口中的run()方法的功能和作用相同,都用来定义线程对象被调度之后所执行的操作,都是系统自动调用而用户程序不得引用的方法。
    3. sleep(int millsecond): 优先级高的线程可以在它的run()方法中调用sleep方法来使自己放弃CPU资源,休眠一段时间。
    4. isAlive(): 线程处于“新建”状态时,线程调用isAlive()方法返回false。在线程的run()方法结束之前,即没有进入死亡状态之前,线程调用isAlive()方法返回true.
    5. currentThread():该方法是Thread类中的类方法,可以用类名调用,该方法返回当前正在使用CPU资源的线程。
    6. interrupt() :一个占有CPU资源的线程可以让休眠的线程调用interrupt()方法“吵醒”自己,即导致休眠的线程发生InterruptedException异常,从而结束休眠,重新排队等待CPU资源。
  • 线程的同步
      在处理多线程问题时,我们必须注意这样一个问题:当两个或多个线程同时访问同一个变量,并且一个线程需要修改这个变量。我们应对这样的问题作出处理。

  所谓线程同步就是若干个线程都需要使用一个synchronized修饰的方法.即程序中的若干个线程都需要使用一个方法,而这个方法用synchronized给予了修饰。

  多个线程调用synchronized方法必须遵守同步机制:当一个线程使用这个方法时,其他线程想使用这个方法时就必须等待,直到线程使用完该方法。在使用多线程解决许多实际问题时,可能要把某些修改数据的方法用关键字synchronized来修饰。

  • 线程联合

    • 线程的join方法表示一个线程等待另一个线程完成后才执行。join方法被调用之后,线程对象处于阻塞状态。有人也把这种方式称为联合线程,就是说把当前线程和当前线程所在的线程联合成一个线程。哪个线程调用了该方法,那么这个线程就要先执行完才会执行其他的线程.

      教材学习代码调试中的问题和解决过程:

  • 问题1:线程与进程的区别是什么?
  • 问题1解决方案:进程是静态的 是一个镜像
    线程是动态的 一个程序在运行的时候会先开辟线程然后执行里面的方法 开辟更多的新线程 而进程则是操作系统用来给用户进行展现程序运行的一种机制
    所以说在实际开发中不管是java还是其他语言 都是只存在线程的

  • 问题2:start()方法和run()方法的区别?
  • 问题2的解决方法:只有调用了start()方法,才会表现出多线程的特性,不同线程的run()方法里面的代码交替执行。如果只是调用run()方法,那么代码还是同步执行的,必须等待一个线程的run()方法里面的代码全部执行完毕之后,另外一个线程才可以执行其run()方法里面的代码。

代码托管

错题总结

  • JDBC编程的异常类型分为AC

    • A.SQLException
    • B.SQLError
    • C.SQLWarning
    • D.SQLFatal
    • E.SQLTruncation
  • executeUpdate返回的类型是int,代表的含义是受影响的记录A
    • A.true
    • B.false
  • 下列属于常用数据库的是ACDE
    • A.Access
    • B.XAMMP
    • C.MySQL
    • D.Oracle
    • E.SQL

总结

本周学习了java中的多线程,开始学习的时候我还在想为什么要使用多线程,后来经过学习,之后我学习完这一章之后了解到这样使用能够发挥多核cpu的优势,防止阻塞,便于建模,能够灵活运用多线程的话会便捷许多。

20165205 2017-2018-2 《Java程序设计》第八周学习总结的更多相关文章

  1. 201521123027 <java程序设计>第八周学习总结

    1.本周学习总结 1.1思维导图 2.书面作业 Q1.List中指定元素的删除(题目4-1) 1.1 实验总结 总结:判断List中是否存在指定元素,需要用到equals方法,若存在就用remove进 ...

  2. 20165205 2017-2018-2 《Java程序设计》第九周学习总结

    20165205 2017-2018-2 <Java程序设计>第九周学习总结 教材学习内容总结 掌握URL类的使用方法 URL类的构造方法: public URL(String spec) ...

  3. 20165205 2017-2018-2 《Java程序设计》 第二周学习总结

    20165205 2017-2018-2 <Java程序设计>第一周学习总结 教材学习内容总结 学习第二章知识(标识符,关键字,数据类型,输入.输出数据和数组) 学习第三章知识(运算符,基 ...

  4. 20165205 《Java程序设计》第一周学习总结

    20165205 2017-2018-2 <Java程序设计>第一周学习总结 教材学习内容总结 安装JDK1.8,Git(在虚拟机内) 了解Git的使用方法 学习了vim的使用方法(很难) ...

  5. 201571030332 扎西平措 《面向对象程序设计Java》第八周学习总结

    <面向对象程序设计Java>第八周学习总结   项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https: ...

  6. 201871010106-丁宣元 《面向对象程序设计(java)》第八周学习总结

    201871010106-丁宣元 <面向对象程序设计(java)>第八周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nwn ...

  7. 学号 20175212 《Java程序设计》第九周学习总结

    学号 20175212 <Java程序设计>第九周学习总结 教材学习内容总结 一.MySQL数据库管理系统 1.在官网上下载并安装MySQL 2.在IDEA中输入测试代码Connectio ...

  8. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  9. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  10. 20145236 《Java程序设计》第九周学习总结

    20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...

随机推荐

  1. Linux中chown和chmod的区别和用法

    转载自:http://www.cnblogs.com/EasonJim/p/6525242.html chmod修改第一列内容,chown修改第3.4列内容: chown用法: 用来更改某个目录或文件 ...

  2. centos添加额外测源,解决:No package openvpn available.

    centos添加额外测源,解决:No package openvpn available. ##添加额外的repositories,安装openvpn yum install epel-release ...

  3. 排序算法<No.1> 【计数排序】

    继上篇博文,今天我将先介绍一下什么是计数排序,将计数排序描述清楚后,再进行后续的桶排序方法解决这个问题. 通常情况下,一提到排序,大家第一反应就是比较,其实,今天我要说的这个计数排序,不是基于比较的排 ...

  4. [转]在Eclipse中搭建Python开发环境

    在Eclipse中搭建Python开发环境 来自: http://hi.baidu.com/hqwfreefly/blog/item/2543181d0afd9604314e150e.html 前言 ...

  5. Redis几种数据类型的应用场景(转)

    原文地址:https://blog.csdn.net/xiaoliuliu2050/article/details/73250708

  6. java反射以及动态代理的学习

    java反射学习 1)字节码文件的三种获取方式 ①:Object类的getClass()方法:对象.getClass() ②:数据类型的静态的class属性:类名.class ③:通过Class类的静 ...

  7. 写在vue总结之前(一)

    在大概2016年6月吧,知道了vue,博客园有个博主用vue写了一个不算完整的博客园app,做出来的效果相比博客园原本的app看上去要华丽很多,那时候做前端还没多久,很多东西都不知道,别人说用vue开 ...

  8. PAT 甲级 1006 Sign In and Sign Out (25)(25 分)

    1006 Sign In and Sign Out (25)(25 分) At the beginning of every day, the first person who signs in th ...

  9. Volley 结合GSON或FastJson用法

    自定义GSON类 public class GsonRequest<T> extends Request<T> { private final Gson mGson = new ...

  10. springMVC的执行流程和完整代码

    一.什么是 Spring MVC Spring MVC 属于 SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 里面,是一个强大灵活的 Web 框架.Spring ...