在学习Java并发编程之前,先来了解一下几个概念。
什么是并发?维基百科中这样介绍:
在计算机科学中,并发性是指程序,算法或问题的不同部分或单元按无序或部分顺序执行而不影响最终结果的能力。这允许并行单元的并行执行,这可以显着提高在多处理器和多核系统中执行的总体速度。在更技术性的术语中,并发性指的是程序,算法或问题的可分解性属性成为顺序无关或部分有序的组件或单元。
首先,并发是一种能力,是一种将程序分为几个片段,在单独的处理器上运行每个片段,而不影响最终结果的能力。
并发的优点上面也提到了,它可以显著提高程序的性能。
并发可以既可以提高运行在多处理器上的程序的性能,也可以提高运行在单处理器上的程序的性能。如果程序在多处理器的机器上运行,可以将程序分为多个任务,将这些任务分配给多个处理器,可以极大提高性能。典型的应用是Web服务器处理大量的用户请求。但实际上并发通常用来提高运行在单处理器上的程序的性能。试想下,将程序分为多个任务,如果顺序执行任务,万一哪个任务由于某种原因卡住了(阻塞),整个程序都将停止运行。而有了并发,当一个任务阻塞时,其他任务还可以继续执行。如果没有阻塞,那么在单处理器上使用并发就没有意义,还会影响性能,因为并发需要切换任务,比顺序执行任务开销更大。
如何达到并发的目的呢?这里就要提到多线程,多线程就是达到并发目的的一种手段。
什么是多线程呢?多线程,是指从软件或者硬件上实现多个线程并发执行的技术。应用程序可以使用多线程将程序分割为多个子任务,并让底层体系结构管理线程如何运行,可以并发在一个内核上,也可以并行在多个内核上运行。
什么是线程呢?线程是可以由调度程序独立管理的最小程序指令序列。我的理解是上面说的任务就是由线程来负责的。
下面再补充几个概念。
并发与并行
通俗的说,并发是多个任务交替执行,而并行是多个任务同时执行。两者的关键在于“同时”这个关键词。
线程和进程
在计算中,进程是正在执行的计算机程序的一个实例。线程是可以由调度程序独立管理的最小程序指令序列。一个进程可以由多个执行线程组成。