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. WINSCP传输文件自动赋予777权限

    WinSCP WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端.同时支持SCP协议.它的主要功能就是在本地与远程计算机间安全的复制文件. 为了复制到Linux的文件具有777 ...

  2. mybatis异常:Caused by: java.lang.IllegalArgumentException: Result Maps collection already contains value for。。。。。。

    框架环境:ssm 昨天下午技术经理更新了下表结构,多加了一个字段. 之后我根据新的mapper.xml文件写了增删改查的操作.重新启动之后不是这个错就是那个错,一大堆错误,头疼. 像类似于NoSuch ...

  3. git 仓库相关命令

    git配置文件 : .git/config 配置存储远程连接用户信息 [credential] helper = store 配置www用户下默认git pull账号和密码,这样每一个新加的项目都不用 ...

  4. 写了一个hiero中添加自定义Token的脚本

    Hiero自带Token往往不够用,shotname中自带版本号的情况下要升级版本会很麻烦,比如Shot_0001_v001这样一个序列名,要升级为Shot_0001_v002就必须把_v001之前的 ...

  5. InfluxDB 1.6文档

    警告!此页面记录了不再积极开发的InfluxDB的早期版本.InfluxDB v1.7是InfluxDB的最新稳定版本. InfluxDB是一个时间序列数据库,旨在处理高写入和查询负载.它是TICK堆 ...

  6. eclipse基于git上传项目到码云上

    此文章只讲如何把项目上传到码云上面,前提是你的项目已经用git创建好了. 关于如何用git创建项目,请读者见我博客的另一篇文章. 继续:右键点击ssm [ssm master]项目-->选择Te ...

  7. 【linux】之内核升级

    安装docker要满足一定的条件,对于cents系统,要求必须是64位,并且内核版本是3.10以上. 如果你的centos操作系统内核低于3.10,需要升级到这个版本以上,才能安装docker. 第一 ...

  8. PAT 乙级 1054 求平均值 (20) C++版

    1054. 求平均值 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题的基本要求非常简单:给定N个实 ...

  9. java1.8新特性(optional 使用)

    经常在程序中出现 java.lang.NullPointerException  为了避免  报错,总是要进行一些 是否为null 的if else 判断 ,1.8 可以使用optional 类 来简 ...

  10. Ansible基础入门

    1.1 Ansible是什么        随着移动互联.物联网.互联网+.大数据.云计算等大规模应用的催生推动,以及人们日常生活的互联网化,互联网的蓬勃发展不仅冲击影响着整个经济体,更对人们的生活理 ...