多线程Thread

作者: 紫某某 | 来源:发表于2018-01-16 10:00 被阅读6次

    1.背景介绍

    线程

    进程中负责程序执行的执行单元 线程本身依靠程序进行运行

    进程

    执行中的程序一个进程至少包含一个线程

    2.知识剖析

    多线程有什么用?

    发挥多核CPU的优势

    防止阻塞

    线程的实现

    继承Thread类

    实现Runnable接口

    使用ExecutorService、Callable、Future实现有返回结果的多线程

    3.常见问题

    线程的状态

    1、新建状态(New):新创建了一个线程对象。

    2、就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。

    3、运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。

    4、阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种:

    (一)、等待阻塞:运行的线程执行wait()方法,JVM会把该线程放入等待池中。(wait会释放持有的锁)

    (二)、同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池中。

    (三)、其他阻塞:运行的线程执行sleep()或join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。(注意,sleep是不会释放持有的锁)

    5、死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

    4.配置展示

    5.扩展思考

    上下文切换

    对于线程的上下文切换实际上就是 存储和恢复CPU状态的过程,它使得线程执行能够从中断点恢复执行。

    上下文的切换开销也很重要,如果你创建了太多的线程,CPU 花费在上下文的切换的时间将多于执行程序的时间!

    6.参考文献

    http://www.runoob.com/java/java-multithreading.html

    https://www.cnblogs.com/lwbqqyumidi/p/3804883.html

    https://zhuanlan.zhihu.com/p/26441926

    http://www.importnew.com/21136.html

    7.更多讨论

    如果调用run方法,即相当于在主线程中执行run方法,跟普通的方法调用没有任何区别,此时并不会创建一个新的线程来执行定义的任务。

    通过调用start()方法,就会创建一个新的线程了

    在下载的过程中可能会用到多线程。

    PPT:PPT


    undefined_腾讯视频

    技能树.IT修真院

    “我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

    这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~

    相关文章

      网友评论

        本文标题:多线程Thread

        本文链接:https://www.haomeiwen.com/subject/ikzjoxtx.html