为什么使用多线程
所有技术都是为了解决已有问题而出现的。
以前的互联网多为单体服务,体量少的现在多为集群服务,多个用户同时访问服务时,多个线程同时访问。
例如,在电气商务系统中,为了在同一时刻,例如全部采购时,多个用户同时接入服务器,现在公司开发的基本上是多线程。
使用多线程确实可以提高执行效率,但同时还必须特别注意数据的添加和删除。 这是线程安全问题,如上面提到的HashMap vs HashTable和Vector vs ArrayList。
确保线程的安全性有很多方法,如锁定,但多线程相关问题很麻烦,因为可能会出现死锁等其他问题。
因此,必须了解多线程原理、可能出现的问题以及解决问题的方法,以获得高薪职位。
进程vs线程
程序计划
说起过程,首先要说程序。
程序,说白了代码,或者是一系列的指令的集合。 例如,“微信. exe”是一个过程,文档最终由CPU执行。
进程流程
程序运行后,就是一个过程。
所以程序是“死”的,所以过程是“活”的。
例如,在任务管理器中,进程即“移动”应用程序。
问:这些进程是否并行运行?
单核CPU在一个时间片上只能运行一个进程。 但是,由于切换速度快,我们感觉不到,引起了多进程的幻想。 (多核CPU真正并行运行。 中所述)
问:那么,如果这个进程没有运行呢?
如果进程a执行了时间片,但是还没有完成,则为了便于下一次执行,将存储刚刚执行的数据信息称为“存储现场”。
并且,下次夺取资源执行时,“恢复现场”后继续执行。
像这样循环往复。 的双曲馀弦值。

这种反复的保存和恢复是开销,程序的执行也会变慢。
问:有更有效率的方法吗?
如果两个线程属于同一进程,则不需要保存和恢复现场。
这是NIO模型的想法,也是NIO模型比BIO模型更有效率的理由,因此在后面叙述。
线程thread
线程是该过程中的具体执行路径并在实际中工作。
在一个过程中,一个时间片也只能运行一个线程,但由于时间片的切换速度非常快,所以看起来好像是同时进行的。一个进程至少有一个线程。 例如,主线程是我们平时正在写的main ()函数,是用户线程,并且gc线程由JVM制造,负责无用单元收集,是守护程序线程。