学习一下入门级的多线程
学习多线程,先了解什么叫线程,什么叫进程
一般我们运行的程序都是进程级的,就是运行一个进程的意思,进程之下还有一群小弟叫线程,多个进程可以同时运作,多个线程也可以,但是一般我们只认识大哥,就是进程,所以用户一般不纠结这个,但是开发人员就不一样了,得知道,一个进程其实内部还有若干个线程,一般最少会有一个主线程,在java里对应的是main方法开启的main线程,这一段要强调的是,线程才是资源调度的最小单位,而不是进程。 线程与进程的区别 一般提到这个,应该主要比较的是多线程与多进程的区别
1、首先是资源调度,进程的开销会比线程大,大多少就得看用什么系统,对window来说貌似区别挺大的
2、通信,多线程通信比较容易,多进程通信比较复杂,多线程通信很快,多进程比较慢
3、多进程稳定性比较好,一个进程的崩溃不会影响到其他进程,多线程稳定性较差,一个线程崩了整个进程就崩了也就是说所有线程都崩了
并发与并行
上面说到多进程多线程的同时运作,本质上是不对的,首先要了解到计算机的发展是从单核到多核,但是即使是单核时期,也能实现所谓的多任务同时进行,前提是我们使用的都是支持多任务的系统,当有运行多任务的请求时,cpu会分别分配给各个任务一段运行时,让各个任务交替进行,因为这个运行时很短,所以一般我们感觉不到,比如,让浏览器执行0.001秒,让QQ执行0.001秒,再让音乐播放器执行0.001秒,在人看来,CPU就是在同时执行多个任务。即使是多核CPU,因为通常任务的数量远远多于CPU的核数,所以任务也是交替执行的。顺便提一下,我们使用的windows,linux都是抢占式多任务系统。那么这就是并发。
并行就不一样了,并行是指多个任务,拥有独立的运行时,独立的CPU,互不干涉,是真正的同时进行,多核时代才能做到这种程度,但是一般来说这样太浪费资源,多数情况下我们使用的都是并发,常提到的java高并发。
之前想多写写java多线程相关的东西,于是对java的多线程做了一些总结,最后汇成了一张java多线程相关的体系结构图,并且推荐给大家这份Java多线程编程实战指南
什么都不说了,先上图吧
![](https://i-blog.csdnimg.cn/blog_migrate/5a53eb30b057b4727f30a1757c7e40b4.png)
内容简介
这本《Java多线程编程实战指南》正是这两个领域的集大成者,它不仅深入透彻地分析了Java多线程编程的方方面面,还将其与设计模式有机地结合到了一起,形成了主动对象模式、两阶段终止模式、生产者/消费者模式、流水线模式、线程池模式等对实际项目开发会起到积极指导作用的诸多模式。可以这么说,本书不仅会向大家介绍Java多线程开发的难点与重点,还会探讨在某些场景下该使用哪种模式,这样做会给项目带来什么好处。从这个意义.上来说,本书是Java多线程开发与设计模式理论的集大成者,相信会给广大的Java开发者带来切实的帮助。
第1章Java多线程编程实战基础
![](https://i-blog.csdnimg.cn/blog_migrate/8dea826be75a3babc88b1482477ad368.png)
第2章设计模式简介
![](https://i-blog.csdnimg.cn/blog_migrate/58dcd5ed215c36b52694455f908686a8.png)
第3章Immutable Object (不可变对象)模式
![](https://i-blog.csdnimg.cn/blog_migrate/770ab7cee3cfd58c2b27a42bbb5404e5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1d595174b711ba9e06735ec41d206592.png)
第4章Guarded Suspension (保护性暂挂)模式
![](https://i-blog.csdnimg.cn/blog_migrate/d2e3b12af3f129fe06bae074c8b19567.png)
第5章Two-phase Termination (两阶段终止)模式
![](https://i-blog.csdnimg.cn/blog_migrate/5eecd1f0b06cb4b82481d145827d3651.png)
第6章Promise (承诺)模式
![](https://i-blog.csdnimg.cn/blog_migrate/297135d5607c979ee76b3795eda4424a.png)
第7章Producer-Consumer (生产者/消费者) 模式.
![](https://i-blog.csdnimg.cn/blog_migrate/8c543702041faf6c21b7d56b96c0a390.png)
第8章Active Object (主动对象)模式..
![](https://i-blog.csdnimg.cn/blog_migrate/dc426f79a3081797e28756113cce95bb.png)
第9章Thread Pool (线程池)模式.
![](https://i-blog.csdnimg.cn/blog_migrate/90cb2650c7b4e10d3e289fa2ee3f953e.png)
第10章Thread Specific Storage (线程特有存储)模式,
![](https://i-blog.csdnimg.cn/blog_migrate/442d5a8829b60c7d74546b32a389e9bc.png)
第11章Serial Thread Confinement ( 串行线程封闭)模式
![](https://i-blog.csdnimg.cn/blog_migrate/6a89fc2db8c1b8021a00e278953636d2.png)
第12章Master-Slave (主仆)模式
![](https://i-blog.csdnimg.cn/blog_migrate/5e4f846ce1d1bf70592da16129374b31.png)
第13章Pipeline (流水线)模式
![](https://i-blog.csdnimg.cn/blog_migrate/31c2633eed5a90c0c3dbcb0859e0e0d7.png)
第14章Half-sync/Half-async (半同步/半异步)模式.
![](https://i-blog.csdnimg.cn/blog_migrate/52134ec368e8476a609fc5ad0f537663.png)
第15章模式语言
![](https://i-blog.csdnimg.cn/blog_migrate/cfbf2eb4bd4fd59cd12598314fd2e48c.png)
模式简介。这部分简要介绍了相应设计模式的由来及核心思想,以便读者能够快速地对相应设计模式有个初步认识。
模式的架构。这部分会从静态(类及类与类之间的结构关系)和动态(类与类之间的交互)两个角度对相应设计模式进行详细讲解。模式架构分别使用UML类图(Class Diagram) 和序列图(Sequence Diagram)对模式的静态和动态两个方面进行描述。
实战案例解析。在相应设计模式架构的基础上,本部分会给出相关的实战案例并对其进行解析。不同于教科书式的范例,实战案例强调的是“实战”这一背景。因此实战案例解析中,我们会先提出实际案例中我们面临的实际问题,并在此基础上结合相应设计模式讲解相应设
计模式是如何解决这些问题的。实战案例解析中我们会给出相关的Java代码,并讲解这些代码与相应设计模式的架构间的对应关系,以便读者进一步 理解相应设计模式。为了便于读者进行实验,本书给出的实战案例代码都力求做到可运行。实战案例解析有助于读者进- - 步理解相应的设计模式,并体验相应设计模式的应用场景。建议读者在阅读这部分时先关注重点,即实战案例中我们要解决哪些问题,相应设计模式又是如何解决这些问题的,以及实战案例的代码与相应设计模式的架构间的对应关系。而代码中其与设计模式非强相关的细节则可以稍后关注。
模式的评价与实现考量。这部分会对相应设计模式在实现和应用过程中需要注意的一- 些事项、问题进行讲解,并讨论应用相应设计模式所带来的好处及缺点。该节也会讨论相应设计模式的典型应用场景。
可复用实现代码。这部分给出相应设计模式的可复用实现代码。编写设计模式的可复用代码有助于读者进--步理解相应设计模式及其在实现和应用过程中需要注意的相关事项和问题,也便于读者在实际工作中应用相应设计模式。
Java标准库实例。考虑到Java标准库的API设计过程中已经应用了许多设计模式,本书尽可能地给出相应设计模式在JavaAPI中的应用情况。
相关模式。设计模式不是孤立存在的,一个具体的设计模式往往和其他设计模式之间存在某些联系。这部分会描述相应设计模式与其他设计模式之间存在的关系。这当中可能涉及GOF的设计模式,这类设计模式并不在本书的讨论范围之内。有需要的读者,可以参考相关书籍,小编都有的。