今天先了解一下各个角色的定义
前言
最近经常被问到线程实现方式、多线程如何使用、锁机制、资源是否共享、如何创建安全的生产者、并发开发到底是什么,等等等诸多类似问题,所以本着学习的心态顺便记录点什么,那么我们开始ba~~~
友情提示:这几篇文章都不会过度深究底层源码,谢谢~
一. 进程
1. 进程概念
简单来说,某个程序就是在使用一个进程使其运作。
2. 注意点
- 进程是独立的,相互不共享,且都有自己的存储空间和系统资源
- 你可以把进程看成一个大哥,帅气而又迷人!
- 这个不是重点直接跳过
二. 线程
1. 线程概念
一个程序正常情况由一个进程执行,执行人是一根线程,也就是主线程(main方法,专业术语:main thread)。
也就是说主线程按照一定的规范顺序执行你写的代码
2. 注意点
可以把线程理解为进程(大哥)中的一个线程(小弟),画个图更好的理解一下
问题:大哥派小弟去干活,小弟干活慢,怎么办呢,大哥着急呀,这时候就可以多找几个小弟,去干相同的活或者分工干不同的活,加快效率。
三. 多线程
1.多线程概念
终于来到多线程了,上王牌!
一个进程是可以有多个线程的,多个线程可以同时执行代码,提高效率。
2. 注意点:
上图:
- 可以看到,多个线程同时执行代码块,当然具体执行哪个代码块你自己定,就是空跑也是可以的。
- 正常情况下,使用完一个线程需要进行资源的释放。
- 我们通过多种方式获取到线程,使多个线程同时执行代码逻辑,这也就是我们常说的多线程开发,这也是分布式开发的基础。
问题:首先每个小弟再用的时候都得打电话叫过来(new 对象),还得一个一个联系(配置),多累! 【频繁的创建和销毁线程对系统的开销是非常大的】
四. 线程池
1. 线程池概念
线程池的基本思路是一种对象池的思想,
开辟一块内存空间,里面存放了一些(未死亡)的线程,
需要时候调用(不是创建),池中线程执行调度由池管理器来处理。
2. 注意点
这时候关键来啦,通俗点讲:有没有一种可能,提前叫一帮小弟过来,让这帮小弟就在旁边等着,需要得时候就上,不需要就站在旁边等待呢!!!
- 线程池是由线程组成,有很多钟线程池,如固定线程数线程池或可变线程数线程池等。
- 线程池可以帮忙创建调用线程,并且减少系统的开销、使程序运行速度提升,而且非常方便在多个线程之间进行自定义化操作。(wait-notify,如果做一个安全的生产者,这是必备得知识点,重点)
四. 总结
这篇文章写的比较简单,因为java是一门语言,也是一个工具,要想透彻了解,并非一日之寒,而需日积月累,所以学习或者了解到此就可。我们由浅入深,下一篇开始研究“主线程(头号小弟)”,包括概念,如何使调用,顺便看看线程(研究研究小弟,看看怎么剥削他们合适,嘿嘿)!!!
如果写的有误或者理解得不好,请一定告知,我会改正~~