进程和线程
一个程序就是一个进程,而一个程序中的多个任务则被称为线程。进程是表示资源分配的基本单位,线程是进程中执行运算的最小单位,亦是调度运行的基本单位。举个例子:打开你的计算机上的任务管理器,会显示出当前机器的所有进程,QQ,360等,当QQ运行时,就有很多子任务在同时运行。比如,当你边打字发送表情,边好友视频时这些不同的功能都可以同时运行,其中每一项任务都可以理解成“线程”在工作。
使用多线程
在Java的JDK开发包中,已经自带了对多线程技术的支持,可以很方便地进行多线程编程。实现多线程编程的方式有两种,一种是继承 Thread 类,另一种是实现 Runnable 接口。使用继承 Thread 类创建线程,最大的局限就是不能多继承,所以为了支持多继承,完全可以实现 Runnable 接口的方式。需要说明的是,这两种方式在工作时的性质都是一样的,没有本质的区别。
多线程的优缺点
多线程的优点:
1)资源利用率更好2)程序设计在某些情况下更简单3)程序响应更快
多线程的代价:
1)设计更复杂虽然有一些多线程应用程序比单线程的应用程序要简单,但其他的一般都更复杂。在多线程访问共享数据的时候,这部分代码需要特别的注意。线程之间的交互往往非常复杂。不正确的线程同步产生的错误非常难以被发现,并且重现以修复。
2)上下文切换的开销当CPU从执行一个线程切换到执行另外一个线程的时候,它需要先存储当前线程的本地的数据,程序指针等,然后载入另一个线程的本地数据,程序指针等,最后才开始执行。这种切换称为“上下文切换”(“context switch”)。CPU会在一个上下文中执行一个线程,然后切换到另外一个上下文中执行另外一个线程。上下文切换并不廉价。如果没有必要,应该减少上下文切换的发生。
很多小伙伴在面试时被多线程难住,今天就给大家推荐这本多线程编程实战指南(设计模式篇),它采用Java (JDK1.6)语言和UML (Unified Modeling Language)为描述语言,并结合作者多年工作经历的相关实战案例,)介绍了多线程环境下常用设计模式的来龙去脉:各个设计模式是什么样的及其典型的实际应用场景、实际应用时需要注意的相关事项以及各个模式的可复用代码实现。
下面是其中的部分内容
第1章 Jav多线程编程实战基础
有一定的多线程编程基础和工作经验的读者,也不妨继续往下看,看后或许会有新的发现。这一章的内容并非纯粹的理论“基础”它更加强调“ 实战’
第2章 设计模式简介
第3章Immutable object (不可变对象)模式
第4章Guarded Suspension ( 保护性暂挂)模式
第5章Iwo-phase Termination (两阶段终止)模式
第6章Promise (承诺)模式
第七章Producer-Consumer (生产者/消费者)模式
第八章Active object (主动对象)模式
第9章Thread Pool (线程地)模式
第10章Thread Specifie Storage (线程特有存储)模式
第十一章Serial Thread Confinement (串行线程封闭)模式
第12章Master-Slave (主仆)模式
第13章Pipeline (流水线)模式
第14章Ha1f-syn.c/Half-async (半同步/半异步)模式
、