20165201 2017-2018-2 《Java程序设计》第8周学习总结
教材学习内容总结
第十二章
1.Java线程的状态
- 新建:当线程对象创建后,即进入了新建状态。仅仅由java虚拟机分配内存,并初始化。如:Thread t = new MyThread();
- 运行:当CPU开始调度处于就绪状态的线程时,执行run()方法,此时线程才得以真正执行,即进入到运行状态。注:绪状态是进入到运行状态的唯一入口,也就是说,线程要想进入运行状态执行,首先必须处于就绪状态中
- 暂停:处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入到就绪状态,才 有机会再次被CPU调用以进入到运行状态。根据阻塞产生的原因不同,阻塞状态又可以分为三种:等待阻塞 – 运行状态中的线程执行wait()方法,使本线程进入到等待阻塞状态,JVM会把该线程放入等待池中;同步阻塞 – 线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态;其他阻塞 – 通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态
- 死亡:线程run()方法执行完了或者因异常退出了run()方法,该线程结束生命周期。 当主线程结束时,其他线程不受任何影响
2.创建线程:
- 继承Thread类创建线程,程序中如果想要获取当前线程对象可以使用方法:
Thread.currentThread()
;如果想要返回线程的名称,则可以使用方法:getName();
实现Runnable
接口创建线程
使用Callable
和Future
创建线程
3.线程常用方法
start()
isAlive()
线程处于新建状态时,线程调用isAlive()方法返回false
没有进入死亡状态之前,返回true
进入死亡状态后(实体内存被释放),返回falserun()
定义线程线程对象被调度之后所执行的操作sleep(int millsecond)
必须在try-catch语句块中调用sleep方法
4.线程同步
5.线程联合
6.计时器线程 Timer类
学习中的问题和解决过程
-
问题:看了线程调用的方法,但是
start()
方法和run()
方法到底有什么本质区别? -
问题解决方法:我在网上找到了详细的解答:只有调用了start()方法,才会表现出多线程的特性,不同线程的run()方法里面的代码交替执行。如果只是调用run()方法,那么代码还是同步执行的,必须等待一个线程的run()方法里面的代码全部执行完毕之后,另外一个线程才可以执行其run()方法里面的代码
代码托管
上周考试错题总结
答案:ABCD
守护线程应该永远不去访问固有资源,如文件、数据库,因为它会在任何时候甚至在一个操作的中间发生中断!!!
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 6000行 | 30篇 | 400小时 | |
第一周 | 23/23 | 1/5 | 18/18 | |
第二周 | 367/390 | 2/7 | 16/34 | |
第三周 | 672/1062 | 1/8 | 23/57 | |
第四周 | 724/1786 | 2/10 | 20/77 | |
第五周 | 1084/2870 | 1/11 | 15/92 | |
第六周 | 1187/4057 | 1/12 | 18/110 | |
第七周 | 756/4813 | 1/13 | 20/130 | |
第八周 | 1240/6053 | 1/14 | 18/148 |