Java中多线程概念详解

    在操作系统中,两个比较容易混淆的概念是线程(thread)与进程(process)。操作系统中的进程是一个计算机程序的运行实例。计算机程序中包含了需要执行的指令,而进程则表示正在执行的指令,对同一个计算机程序可以创建多个进程。这些进程的运行状态各不相同。进程一般作为资源的组成单位。进程有自己独立的地址空间,包含程序内容和数据。不同进程的地址空间的相互隔离的。进程拥有各种资源和状态信息,包含打开的文件、子进程和信号处理器等。线程表示的是进程的执行流程,是CPU调度执行的基本单位。线程有自己的程序计数器、寄存器、堆栈和帧等。同一进程中的线程共用相同的地址空间,同时共享进程所拥有的内存和其他资源。

         引入线程的主要动机在于提高程序的运行性能。在一个程序中主要存在使用CPU和IO操作的两类计算。IO操作相对CPU运算来说比较耗时,而且很多都是阻塞式是。当一个线程所执行的IO操作被阻塞时,同一进程中的其他线程可以使用CPU来进行计算。在资源允许时,多个线程可以同时进行IO操作。这种方式提高了操作系统中资源的使用效率,进而提高了进程的运行性能。线程的概念在主流操作系统和编程语言中都得到了支持。不同操作系统和编程语言中的线程的使用方式有很大的区别。这对于开发跨平台的多线程程序来说是个不小的挑战。Java平台通过Java虚拟机解决了跨平台的问题,使由相同API开发的多线程程序在不同的平台上都能正确运行。

      Java标准库提供了与进程和线程相关的API。表示进程的是java.lang.Process类和创建进程的是java.lang.ProcessBuilder类。表示线程的是java.lang.Thread类。在虚拟机启动之后,通常只有一个普通线程来运行程序代码。这个线程用来启动主Java类的main方法的运行。程序在运行时可以根据需要创建新的线程并启动线程的运行。除了普通线程之外,还有一类线程是守护线程(daemon thread)。守护线程一般在后台运行,提供程序运行时所需的服务。当虚拟机中运行的所有线程都是守护线程时,虚拟机终止运行。

        Java线程API的具体实现由底层的Java虚拟机来负责提供,为了好地理解线程API的使用及多线程开发,需要对虚拟机内部的相关机制有一定的了解。

原文地址:https://www.cnblogs.com/dyllove98/p/2891601.html