20175320 2018-2019-2 《Java程序设计》第10周学习总结
教材学习内容总结
本周学习了教材的第十二章的内容,在这章中介绍了如何使用Java实现多线程机制,着重讲了线程是如何运行的,以及如何创建线程对象并使用一些线程的常用方法。
线程与进程
一个进程在执行过程中,可以产生多个线程,线程间可以共享进程中的某些内存单元并实现数据交换、实时通信与必要的同步操作。而多线程是指一个应用程序中间同时存在几个执行体,Java应用程序总是从主类的main方法开始指行,如果main方法中没有创建其他的线程,main方法返回时,JVM就会结束我们的Java应用程序。如果main方法中又创建了其他线程,那么JVM就要在主线程和其他线程之间轮流切换,main方法即使执行完最后的语句,JVM也不会结束Java应用程序,直到所有线程都结束后才结束Java应用程序。线程的优先级可以通过setPriority(int grade)
方法调整,如果参数不在1到10的范围内,那么setPriority便产生一个IllegalArgumenException
异常。通过getPriority
方法返回线程的优先级。
Thread类与线程的创建
用Thread类或子类创建线程对象,使用Thread子类的时候需要重写父类的run()
方法。使用Thread类直接创建线程对象时使用Thread(Runnable target)
构造-方法,参数为目标对象,并使参数类实现Runnable
接口。目标对象和线程之间有目标对象和线程完全解耦和目标对象组合线程两种关系,一种可以获得线程对象的引用,另一种无法获得线程对象的引用。
- 1、
start()
:启动线程,调用一次后就不必再次调用。 - 2、
run()
:系统自动调用而用户程序不得引用。 - 3、
sleep(int millsecond)
:休眠线程,必须再try-catch
语句中使用。 - 4、
isaAlive()
:判断线程是否具有实体。 - 5、
currentThread()
:获得当前正在运行的线程。 - 6、
interrupt()
:将休眠的线程唤醒。 - 7、
wait()
:使线程进入等待状态。 - 8、
notify()
:将线程从等待状态唤醒。
其他
- 1、可以使用
join()
和其他线程联合。 - 2、Java可以使用Timer类来周期性地执行操作,Timer类需要设置间隔时间和监视器,且可通过
start()
、stop()
以及restart()
来控制计时器的启停。
教材学习中的问题和解决过程
- 问题1:不知道线程的必要性。
- 问题1解决方法:通过教材的学习我了解到线程可以使多个操作一起运行,不用像一般的程序一样一定要一项操作完成使才能进行下一项。这使得我们可以近似于同时运行多个耗时较多的程序,提高运行效率。
代码调试中的问题和解决过程
无问题。
上周考试错题总结
- 错题1:忽略了该题是多选题,且对各种运行错误不够熟悉。
其他(感悟、思考等,可选)
从以前就听说过线程这一名称,但之前很少细致地去了解线程,通过这周的学习我了解到了线程的重要作用,而Java本身就支持多线程,只需要使用现有的类以及方法即可,这给我们的编程带来了很大的便利。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第七周 | 703/7096 | 2/16 | 30/212 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式 :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。参考:,
- 计划学习时间:25小时
- 实际学习时间:30小时
- 改进情况:多看看