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

教材学习内容总结

第十二章 java多线程机制

  • 一个进程在其执行过程中,可产生多个线程。线程是比进程更小的执行单位
  • JVM保证每个线程都有机会使用CPU资源,等到Java应用程序中的所有线程都结束后才结束应用程序

线程状态与生命周期

  • 使用Thread类及其子类的对象表示线程
  • 调用start()方法将线程加入JVM管理队列。调用以后不能再让线程调用start()方法
  • run()方法规定了线程的具体使命。方法执行完毕后线程变成死亡状态。
    -sleep(int millsecond)使线程进入休眠状态。优先级高的线程可让出CPU资源是优先级低的线程执行
  • wait()方法使线程进入等待状态。通过notify()方法使线程从中断处继续运行。通常将wait()方法放入“while”的循环语句中

常用方法

  • isAlive()用于判断线程是否处于新建状态或进入死亡状态,若是,返回false.
  • 一个已经运行的线程在没有进入死亡状态时,不要再给线程分配实体
  • currentThread()返回当前正在使用CPU资源的线程
  • interrupt()用来“吵醒”调用sleep()方法休眠的线程

    Thread类与线程创建

  • 编写子类时,需要重写run()方法
  • 创建线程的构造方法:Thread(Runnable target),参数是Runnable类型的接口,需向接口传递实例对象

    线程同步

  • 线程同步机制:当一个线程使用synchronized方法时,其他线程若想使用就必须使用wait()方法等待,直到该线程使用完该方法
  • 其他线程在使用同步方法时若不需要等待,则用完方法的同时,执行notifyAll()方法通知所有处于等待状态的线程结束等待
  • 不可以在非同步方法中使用wait()、notify()、notifyAll()方法

    线程联合

  • B线程可通过B.join()联合A线程。A线程将立刻中断执行,等到B执行完毕后恢复执行

    GUI线程

  • AWT-EventQuecue线程负责处理GUI事件
  • AWT-Windows线程负责将窗体或组件绘制到桌面

    计时器线程

  • Timer(int a,Object b)创建计时器
  • start()启动计时器
  • stop()停止计时器
  • restart重启计时器

    守护线程

  • 调用void setDaemon(boolean on)方法设置守护线程
  • 一个线程必须在运行之前设置自己是否是守护线程

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

  • 问题1:实现java多线程的两种方法有什么区别?
  • 问题1解决:通过博客了解到

    采用继承Thread类方式:

    • (1)优点:编写简单,如果需要访问当前线程,无需使用Thread.currentThread()方法,直接使用this,即可获得当前线程。
    • (2)缺点:因为线程类已经继承了Thread类,所以不能再继承其他的父类。
    • 采用实现Runnable接口方式:
    • (1)优点:线程类只是实现了Runable接口,还可以继承其他的类。在这种方式下,可以多个线程共享同一个目标对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。
    • (2)缺点:编程稍微复杂,如果需要访问当前线程,必须使用Thread.currentThread()方法。
  • 问题2:p377的代码TicketHouse中为什么把wait()改为Thread.sleep(3000),李逵永远无法买票?
  • 问题2解决:通过比较wait()方法和Thread()方法,了解到:

    在调用sleep()方法的过程中,线程不会释放对象锁。
    而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备
    获取对象锁进入运行状态。

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

  • 问题1:在调试example12_3时,为什么得到的结果是狗喝水剩7,猫喝水剩8?
  • 问题1解决:通过学习教材视频得知每个电脑的运行的结果不尽相同,输出结果以来当前CPU资源的使用情况而定

上周考试错题总结

  • 错题1

  • select也是数据操作语言
  • 错题2

  • 书上原话:“直接关闭MySQL数据库服务器所占用的命令行窗口不能关闭MySQL数据库服务器,可以使用任务管理器来关闭”

代码托管

https://gitee.com/BESTI-IS-JAVA-2018/20165230/commit/5dd42538867b45b2b037b6d2039c2cf622fd26d9

代码截图

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 13/13 1/30 19/19
第二周 426/426 3/30 12/12
第三周 562/562 4/30 15/15
第四周 1552/1958 5/30 16/16
第五周 1123/3086 6/30 14/14
第六周 747/3833 8/30 12/12
第七周 953/4786 11/30 13/3
第八周 4564/5881 13/30 14/14

参考资料

  • 《Java2 实用教程(第五版)》学习指导

  • java 多线程两种方法的比较
  • java中的sleep()和wait()的区别

  • Intellj IDEA 简易教程

转载于:https://www.cnblogs.com/tiankunye/p/8901650.html

20165230 2017-2018-2 《Java程序设计》第8周学习总结相关推荐

  1. 20175317 《Java程序设计》第一周学习总结

    20175317 <Java程序设计>第一周学习总结 教材学习内容总结 本周学习了Java大致的开发步骤,完成了课件自带的习题. 学习了在windows与Linux系统下不同的编译方法,掌 ...

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

    20155227 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC简介 JDBC全名Java DataBase Connectivity,是java联 ...

  3. 20172318 2016-2017-2 《Java程序设计》第一周学习总结

    20172318 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 在教材中基本明白了计算机系统的运行方式,了解了对于高级语言是使用是掌握好编程的关键,掌握了一 ...

  4. 20155303 2016-2017-2 《Java程序设计》第二周学习总结

    20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...

  5. 20175208 《Java程序设计》第九周学习总结

    20175208 2018-2019-2 <Java程序设计>第九周学习总结 一.教材学习内容总结: 第11章 JDBC与MySQL数据库 MySQL数据库管理系统 MySQL数据库管理系 ...

  6. 20175204 张湲祯 2018-2019-2《Java程序设计》第九周学习总结

    20175204 张湲祯 2018-2019-2<Java程序设计>第九周学习总结 教材学习内容总结 -第十一章JDBC和MySQL数据库要点: 1.下载MySQL和客户端管理工具navi ...

  7. 20155313 2016-2017-2 《Java程序设计》第二周学习总结

    20155313 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 1.1 基本类型 整数:可细分为short整数(占2字节).int整数(占4字节)与long ...

  8. 20155226 2016-2017-2 《Java程序设计》第一周学习总结

    20155226 2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 第一周主要学习了一二章的内容,也浏览了剩余章节,以下是本周主要学习内容总结 1.首先了解了[ ...

  9. 20172325 2018-2019-1 《Java程序设计》第二周学习总结

    20172325 2018-2019-1 <Java程序设计>第二周学习总结 教材学习内容总结 3.1集合 集合是一种聚集.组织了其他对象的对象.集合可以分为两大类:线性集合和非线性集合. ...

  10. 张旭升20162329 2006-2007-2 《Java程序设计》第一周学习总结

    20162329 2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 通过打书上的代码熟悉了Java编程的基本过程 教材学习中的问题和解决过程 1.因为我的虚拟机 ...

最新文章

  1. P1886 滑动窗口(求连续区间最值的O(N)解法,单调队列)
  2. c#中使用消息循环机制发送接收字符串的方法和数据类型转换
  3. 数据不平衡问题都怎么解?
  4. leetcode题库5-- 最长回文子串
  5. [转载] 两种方法分割python多空格字符串
  6. 【web前端特效源码】使用HTML5+CSS3+JavaScript制作一个会动的扔垃圾到垃圾桶动画效果~适合初学者~超简单~ |前端开发 it入门
  7. matlab应力比法,一种考虑隧道围岩应力分布的强度应力比岩爆判据方法与流程
  8. AI面试官来临,教你三招搞定他
  9. 一款多核架构GPU IP有多达33种配置!Imagination要守住移动市场攻向云端
  10. 对视频的分辨率大小进行裁剪
  11. IO到NIO的前因后果,以及NIO的用法(2)——Selector、Channel
  12. 爬虫系列之豆瓣图书排行
  13. 前端HTMLtable标签的属性和使用
  14. 13.0_[Java 面向接口]-类和接口
  15. 分享一篇企鹅的暑期实习生技术面经验
  16. laravel项目使用appnode部署linux系统到阿里云服务器流程记录(待补充)
  17. Flash文件加密器
  18. js添加多marker 高德地图_【高德地图API】从零开始学高德JS API(三)覆盖物——标注|折线|多边形|信息窗口|聚合marker|麻点图|图片覆盖物...
  19. 【困惑】为何他周末不加班
  20. Android可移动的悬浮窗

热门文章

  1. n维数组的操作-04-p2
  2. TPLINK-WR720N刷openwrt
  3. JavaScript验证表单数据,HTML自动验证表单数据是否为空,数字范围
  4. 复制粘贴带相关的文字及链接
  5. 学flash就丢人吗?
  6. PowerDesigner基础使用教程
  7. 微信小程序之WebSocket
  8. elementUI中复选框checkbox的使用
  9. 每天Leetcode 刷题 初级算法篇-设计问题-最小栈
  10. python配什么数据库_python中常见数据库有哪些