过程和线程
过程:
过程可了解为是一个正在运行的程序整体过程是具备肯定独立性能的程序,是操作系统进行资源分配的根本单位
线程:
线程是操作系统进行调度的根本单位
过程 vs. 线程
- 一个程序至多有一个过程,一个过程至多有一个线程
- 线程比过程划分更细,执行开销更小,并发性更高
- 过程是一个实体,领有独立的资源,而同一过程中的多个线程是共享过程的资源的如下图:
- JVM在单过程中运行,JVM中的线程共享属于该过程的堆,所以几个线程能够同时拜访堆中的某个对象,这就导致了线程不平安
- 线程在过程中领有本人的Stack空间,所以一个线程调用办法以及其余局部变量是线程齐全的
总结
过程和线程是蕴含关系,然而多任务既能够由多过程实现,也能够由单过程内的多线程实现,还能够混合多过程+多线程。
具体采纳哪种形式,要思考到过程和线程的特点。
和多线程相比,多过程的毛病在于:
- 创立过程比创立线程开销大,尤其是在Windows零碎上;
- 过程间通信比线程间通信要慢,因为线程间通信就是读写同一个变量,速度很快。
而多过程的长处在于:
多过程稳定性比多线程高,因为在多过程的状况下,一个过程解体不会影响其余过程,而在多线程的状况下,任何一个线程解体会间接导致整个过程解体。
Java语言内置了多线程反对:一个Java程序实际上是一个JVM过程,JVM过程用一个主线程来执行main()
办法,在main()
办法外部,咱们又能够启动多个线程。此外,JVM还有负责垃圾回收的其余工作线程等。
因而,对于大多数Java程序来说,咱们说多任务,实际上是说如何应用多线程实现多任务。
和单线程相比,多线程编程的特点在于:多线程常常须要读写共享数据,并且须要同步。例如,播放电影时,就必须由一个线程播放视频,另一个线程播放音频,两个线程须要协调运行,否则画面和声音就不同步。因而,多线程编程的复杂度高,调试更艰难。
Java多线程编程的特点又在于:
- 多线程模型是Java程序最根本的并发模型;
- 后续读写网络、数据库、Web开发等都依赖Java多线程模型。
因而,必须把握Java多线程编程能力持续深刻学习其余内容。
关注公众号:java宝典