分享人:杨以杰
1.背景介绍
2.知识剖析
3.常见问题
4.配置展示
5.扩展思考
6.参考文献
7.更多讨论
线程
进程中负责程序执行的执行单元 线程本身依靠程序进行运行
进程
执行中的程序一个进程至少包含一个线程
Java程序运行原理和JVM的启动是多线程的吗?
* Java命令会启动java虚拟机,启动JVM,等于启动了一个应用程序,也就是启动了一个进程。该进程会自动启动一个 “主线程” ,然后主线程去调用某个类的 main 方法。
* JVM启动至少启动了垃圾回收线程和主线程,所以是多线程的。
线程的实现
继承Thread类
实现Runnable接口
使用ExecutorService、Callable、Future实现有返回结果的多线程
* 并行就是两个任务同时运行,就是甲任务进行的同时,乙任务也在进行。(需要多核CPU)
* 并发是指两个任务都请求运行,而处理器只能按受一个任务,就把这两个任务安排轮流进行,由于时间间隔较短,使人感觉两个任务都在运行。
* 比如我跟两个网友聊天,左手操作一个电脑跟甲聊,同时右手用另一台电脑跟乙聊天,这就叫并行。
* 如果用一台电脑我先给甲发个消息,然后立刻再给乙发消息,然后再跟甲聊,再跟乙聊。这就叫并发。
源码
上下文切换
对于线程的上下文切换实际上就是 存储和恢复CPU状态的过程,它使得线程执行能够从中断点恢复执行。
上下文的切换开销也很重要,如果你创建了太多的线程,CPU 花费在上下文的切换的时间将多于执行程序的时间!
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
欢迎大家讨论