20175314 《Java程序设计》第十周学习总结
20175314 《Java程序设计》第十周学习总结
教材学习内容总结
- 进程与线程:一个进程的进行期间可以产生多个线程。
- Java内置对多线程的支持,计算机只能执行线程中的一个,Java虚拟机只是从一个线程迅速地切换到另一个线程。
当main方法中有其他线程时,JVM要等到Java应用程序中的所有线程都结束后才会结束Java应用程序。
Java语言使用Thread
类及其子类的对象来表示线程,新建的线程一般要经历4个状态:
① 创建Thread
对象;
② 在第一步创建对象后,该对象仅仅拥有内存次元,需要再调用start()
方法才能使得其成为新线程。如果这个线程是Thread
类的对象,其中run()
方法就立刻执行,且程序必须在子类中重写run()
方法。线程没有结束run()
方法之前,不能让线程再调用start()
方法,否则会抛出IllegalThreadStateException
异常。
③ 线程中断:切换给其他线程;执行了sleep(int time)
方法,经过time毫秒后,该线程就重新排队,以便从中断处继续运行;执行了wait()
方法,线程进入等待状态,此时,其他线程调用notify()
方法来使得在等待状态的线程重新排队以便从中断处继续运行;执行某个操作进入阻塞状态时不能进入排队队列。
④ 线程有两种原因会“死亡”:
一、正常运行完了该线程的全部工作;
二、run()
方法被强制结束。当一个线程“死亡”之后,未死亡的线程会继续轮流占用CPU。
线程是可以设置优先级的(使用setPriority()
方法),当优先级高的线程执行完毕时,才会执行低优先级的线程。可以使用getPriority()方法来获得线程的优先级,优先级只能在1~10之间。 Thread
类与线程的创建。
可以使用Thread
类或者子类创建线程对象,子类必须重写run()
方法,同时子类可以增加新的成员变量、方法使线程有具体的功能。
若创建目标对象的列不包含对线程对象的引用,目标对象可以使用String name=Thread.currentThread().getName();
来获得当前使用CPU资源的线程名字;若目标对象组合线程,则目标对象可以使用String name=Thread.currentThread();
来获得当前使用CPU资源的线程引用。
线程的进行如果到达指定毫秒数还没有运行完run()
方法,那么会先停止,等到睡眠时间结束后再接着运行。- 线程的常用方法
①start()
方法:只有新创建的线程才可以调用该方法。
②run()
方法:该方法是否运行结束是判断线程是否结束的一个重要标准。只有当该方法运行结束后,线程才能再次调用start()方法。
③sleep(int millsecond)
方法:线程可以调用该方法来使程序进入睡眠,知道过了参数指定的秒数过后才“醒来”。该方法必须在try-catch语句中调用,因为线程如果在休眠中被打断,会抛出InterruptedException
异常。
④isAlive()
方法:该方法用来判断线程是否正在运行,若是则返回true
,若不是则返回false
,一个已经运行的线程在没有进入死亡状态时,不要再给线程分配实体。
⑤currentThread()
方法是Thread
类中的类方法,返回当前使用CPU的线程。
⑥interrupt()
方法用来“唤醒”调用sleep方法而处于睡眠状态的线程。 - 线程同步:如果有若干个线程需要同时使用一个方法,为了不出现混乱,可以使用
synchronized
进行修饰。 - 协调同步的线程:当一个线程使用的同步方法中用到了某个变量,而此变量又需要其他线程修改后才能符合本线程的要求,则可以使用
wait()
方法来中断线程的执行,并允许其他线程使用这个同步方法(sleep
方法无法做到)。若有线程在运行同步方法时不需要等待,那么需要在用完方法的同时应用notifyAll()
方法来通知其他所有处于等待的线程结束等待。只有在同步线程中才可以使用wait()
,notify()
,notifyAll()
方法。 - 线程联合:线程A在其运行期间,如果其他线程B调用了
join()
方法和线程A联合,那么A线程会立马中断,直到B线程运行结束A线程才会重新排队。若B线程已经结束,调用join()
方法则不会有任何效果。 - GUI线程:Java包含GUI(图形用户界面)时,会启动多个线程。
- 计时器线程:Java中的
javax.swing
包中的Timer类可以用来创建计时器:Timer(int a,Object b);
,a为毫秒,b为监视器(监视器必须是组件类),每隔a毫秒会执行b一次。java.util
包中也有一个名字是Timer
的类。 - 守护线程:线程默认是非守护线程,线程在运行之前必须设置是否为守护线程。可调用
voidsetDaemon(boolean on)
来将自己设置成一个守护线程。当所有非守护线程运行结束时,守护线程一定会跟着结束。
教材学习中的问题和解决过程
- 线程有新建、运行、中断和死亡四种状态
- 有4种原因的中断:
(1)JVM将CPU资源从当前线程切换给其他线程,使本线程让出CPU的使用权处于中断状态
(2)线程使用CPU资源期间,执行了sleep(int millsecond)
方法,使当前线程进入休眠状态
(3)线程使用CPU资源期间,执行了wait()
方法,使得当前线程进入等待状态
(4)线程使用CPU资源期间,执行某个操作进入阻塞状态,比如执行读/写操作引起阻塞 - 一个线程执行完
run
方法后会进入死亡状态,不能再调用start()
方法 - 建立线程有两种方法:用
Thread
类或其子类 - 使用
setPrority(int grade)
方法设置线程优先级 - Java使我们可以创建多个线程,在处理多线程问题时,我们必须注意这样一个问题:当两个或多个线程同时访问同一个变量,并且一个线程需要修改这个变量。我们应对这样的问题作出处理,否则可能发生混乱
- 当一个线程使用的同步方法中用到某个变量,而此变量又需要其它线程修改后才能符合本线程的需要,那么可以在同步方法中使用
wait()
方法。使用wait
方法可以中断方法的执行,使本线程等待,暂时让出CPU的使用权,并允许其它线程使用这个同步方法。其它线程如果在使用这个同步方法时不需要等待,那么它使用完这个同步方法的同时,应当用notifyAll()
方法通知所有的由于使用这个同步方法而处于等待的线程结束等待 - 线程调用
interrupt()
的作用是“吵醒”休眠的线程。一个占有CPU资源的线程可以让休眠的线程调用interrupt
方法“吵醒”自己,即导致休眠的线程发生InterruptedException
异常,从而结束休眠,重新排队等待CPU资源
代码调试中的问题和解决过程
- 问题:MySQL无法启动:Can't connect to MySQL server on localhost (10061)
- 解决方案:以管理员身份运行
命令提示符
(否则会报Install/Remove of the Service Denied!),输入D:
—mysqld --install
—net start mysql
代码托管
本周考试错题
- 问题:关于 Connection 的描述,何者正确?
A .可以从 DriverManager 上取得 Connection
B .可以从 DataSource 上取得 Connection
C .在方法结束之后 Connection 会自动关闭
D .Connection 是线程安全( Thread-safe) - 理解情况:不会自动关闭,数据多了的话就会堆栈溢出,只能在调用的后边关掉 rs,ps,和con
心得体会
Java的多线程合理运用可以为我们编程带来极大的便利,但也需要认真的学习和充分的练习才能够掌握
学习进度条
代码行数 | 博客量 | 学习时间 | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 16篇 | 320小时 | |
第一周 | 51/100 | 1/1 | 12/20 | 基本掌握了Linux的简单指令 |
第二周 | 173/200 | 1/1 | 18/20 | 学习了Java重要基本语法 |
第三周 | 672/800 | 1/1 | 18/20 | 学习了包含多个类的Java程序及类的包机制 |
第四周 | 436/600 | 1/1 | 12/20 | 学习程序父类和子类的继承规则 |
第五周 | 573/600 | 1/1 | 10/20 | 学习通过类来实现接口和接口回调 |
第六周 | 1182/1200 | 1/1 | 20/20 | 学习内部类、匿名类、异常类和File类 |
第七周 | 491/600 | 1/1 | 14/20 | 学习了Java的常用实用类 |
第八周 | 1302/1500 | 4/4 | 22/25 | 学习了Java的泛型类和单元测试的方法 |
第九周 | 624/800 | 3/3 | 18/20 | 学习使用MySQL数据库服务器 |
第十周 | 799/800 | 5/5 | 20/20 | 学习应用Java多线程机制 |
计划学习时间:20小时
实际学习时间:20小时
参考资料
- Java学习笔记(第8版)
- 《Java学习笔记(第5版)》学习指导
- 使用开源中国(码云)托管代码
- 使用JDB调试Java程序
- 使用码云和博客园学习简易教程
- Java中正则表达式元字符
- Java泛型详解
20175314 《Java程序设计》第十周学习总结的更多相关文章
- 201521123027 <java程序设计>第十周学习总结
1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 异常: 多线程: 2.书面作业 Q1.finally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 ...
- Java程序设计第十周学习总结
Java课程知识梳理: 流的区分; 字符流与字节流的区别: 字节流是直接操作文件本身的,如果没有关闭字节流操作,文件会依然输出内容 而字符流在程序运行之后会发现文件没有任何的内容,这是因为字符流操作的 ...
- 20175314 《Java程序设计》第九周学习总结
20175314 <Java程序设计>第九周学习总结 教材学习内容总结 根据课本的介绍下载了MySQL和Navicat for MySQL并成功对后者进行破解 MySQL客户端管理工具(如 ...
- 20175314 《Java程序设计》第二周学习总结
20175314 <Java程序设计>第二周学习总结 教材学习内容总结 我在APPstore上发现了一个可以支持我们在IOS系统上学习实践Java程序的开发环境,只需要购买专业版就可以使用 ...
- 20175314 《Java程序设计》第一周学习总结
20175314 <Java程序设计>第一周学习总结 教材学习内容总结 除了学院统一购买的<Java 2 实用教程(第5版)>我还在网上买了一本<Head ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 20145236 《Java程序设计》第九周学习总结
20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...
- 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结
20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...
- 20145237 《Java程序设计》第九周学习总结
20145237 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令 ...
随机推荐
- 数据库介绍以及MySQL数据库的使用
一 数据库介绍 1.1 数据库定义 数据库就是存储数据的仓库 本质上就是一套cs结构的TCP程序 客户端连接到服务器 向服务器发送指令 完成数据的操作 1.2 常见数据库 关系型数据库 就是 ...
- 遍历tree
1.解决方法 filterData (arr) { var newArr = [] arr.map((item) => { var childrenArr if (item.children ! ...
- DEX文件解析---2、Dex文件checksum(校验和)解析
一.checksum介绍 checksum(校验和)是DEX位于文件头部的一个信息,用来判断DEX文件是否损坏或者被篡改,它位于头部的0x08偏移地址处,占用4个字节,采用小端序存储. ...
- python打包py为exe程序:PyInstaller
打包库:PyInstaller python程序编写过程中的脚本文件为py格式的文件,当我们想将编写好的程序移植到其他机器上给其他人使用时,如果目标机器没有安装python环境,py文件将无法运行,而 ...
- JS循环嵌套的执行原理
[逆战班] 循环嵌套是指在一个循环语句中再定义一个循环语句的语法结构,外循环执行一次,内循环全部执行完,直到外循环执行完毕,整个循环结束. while.do.. while和for循环语句都可以进行嵌 ...
- 【Python】Pyinstall打包不同尺寸ico制作
前言 最近工作之余在学习python,用Pyinstall打包exe的时候发现图标只能在任务栏或者大图的情况下出现,其他情况还是默认图标,,,!!!∑(゚Д゚ノ)ノ 分析 查资料是因为exe在不同情况 ...
- windows 下载~安装nginx
nginx 中文文档 http://www.nginx.cn/doc/ 到nginx官网下载安装包http://nginx.org/en/download.html 解压安装包 进入windows的c ...
- 数据科学中的常见的6种概率分布(Python实现)
作者:Pier Paolo Ippolito@南安普敦大学 编译:机器学习算法与Python实战(微信公众号:tjxj666) 原文:https://towardsdatascience.com/pr ...
- 2020年IOS超级签最新实现原理详解
相信2019年最火的应该就是这个东西了,我也是摸着石头过河,勉强混进了这个行业! 超级签这个东西吧,说白了就是用个人账号分发应用,大致分成以下几个步骤吧 一.使用配置文件获取UDID 苹果公司允许开发 ...
- 扩展gRPC支持consul服务发现和Polly策略
gRPC由于需要用工具生成代码实现,可开发性不是很高,在扩展这方面不是很友好 最近研究了下,进行了扩展,不需要额外的工具生成,直接使用默认Grpc.Tools生成的代理类即可 相关源码在文章底部 客户 ...