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

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接口创建线程
    使用CallableFuture创建线程

3.线程常用方法

  • start()
  • isAlive()
    线程处于新建状态时,线程调用isAlive()方法返回false
    没有进入死亡状态之前,返回true
    进入死亡状态后(实体内存被释放),返回false
  • run()
    定义线程线程对象被调度之后所执行的操作
  • 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

参考资料

posted @ 2018-04-22 22:48  磁暴魔王特斯拉  阅读(145)  评论(0编辑  收藏  举报