一、概念
进程:系统资源分配的基本单位,又是调度运行的基本单位。
例如,用户运行了一个程序,系统就为该程序创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。然后,该进程放入进程的就绪队列,进程调度程序选中它,并为它分配CPU以及其它资源,该进程才真正运行,所以,进程是系统系统中并发执行的单位。
在Mac、Windows NT采用微内核结构的操作系统中,进程的功能发生了变化,它只是资源分配的单位,而不再是调度运行的单位,在微内核系统中真正调度运行的基本单位是线程,因此,实现并发功能的是线程。
线程:线程是进程中执行运算的最小单位(亦即执行处理器调度的基本单位),线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的方法(函数)。
如果把进程理解为在逻辑上操作系统所完成的任务,那么线程表示完成该任务的许多可能的子任务之一。
例如,假设用户启动了一个窗口中的数据库应用程序,操作系统将对数据库的调用表示为一个进程。
假设用户要从数据库中产生一份工资单报表,并传到一个文件中,这是一个子任务;在产生工资单报表的过程中,用户又可以输入数据库查询请求,这又是一个子任务。这样,系统则把每一个请求——工资单报表和新输入的数据库查询,表示为数据库进程中的独立线程。
线程可以在处理器上独立调度执行,这样在多处理器环境下,就允许几个线程各自在单独的处理器上运行。操作系统提供线程就是为了方便而有效的实现这种并发性。
多线程:多线程是指程序中包含多个执行流。即在一个程序中可以运行多个不同的线程来执行多个不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。
二、内存
每一个进程都从一个主线程开始执行,但可以在它拥有的线程中创建额外的线程。
一个进程的所有线程共享进程的虚拟地址空间和系统资源,一个线程的资源包括线程的机器寄存器设置,内核堆栈,线程环境变量和进程虚拟地址中的用户堆栈。
三、引入线程的好处
- 易于调度
- 提供并发性。通过线程可以方便有效的实现并发。进程可创建多个线程来执行同一程序的不同部分。
- 开销少。创建线程比创建进程要快,所以开销很少。
- 利于充分发挥多处理器的功能。通过创建多线程进程(即一个进程可以具有两个或更多个线程),每个线程在一个处理器上运行,从而实现应用程序的并发性,使每个处理器都得到充分利用。
四、进程与线程的关系
- 一个程序至少有一个进程;一个进程可以多个线程,但至少要有一个线程;一个线程只能属于一个进程。
- 资源分配给进程,同一个进程中的所有线程共享该进程的所有资源。
- 处理器分配给线程,即真正在处理器上运行的是线程
- 线程在执行过程中,要求协作同步。不同进程的线程间,要利用消息通讯的办法实现同步。
五、多线程的优劣
优点:可以提高CUP的利用率。在多线程的程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样大大提高了程序的执行效率,同时也提高了系统资源的利用率。
缺点:
- 线程也是程序,所以线程需要占用内存,线程越多占用内存也越多;
- 多线程需要协调和管理,所以需要CPU时间跟踪线程;
- 线程之间对共享资源的访问会相互影响,必须解决公用共享资源的问题;
- 线程太多会导致控制太复杂,最终可能造成很多bug;
注:本文源自互联网,经过查阅网上资料整理而成,如涉及到他人整理的成果,在此表示感谢。由于涉及到的参考文章比较多,在此就不再一一列举。
本文是目前个人理解的结果,仅供参考,如后续发现问题,本人会进行相应的更正,也欢迎各位对Java线程感兴趣的朋友或者前辈进行指正。
相关推荐
这篇学习笔记将深入探讨Java多线程的核心概念、实现方式以及相关工具的使用。 一、多线程基础 1. 线程与进程:在操作系统中,进程是资源分配的基本单位,而线程是程序执行的基本单位。每个进程至少有一个主线程,...
Java 并发学习笔记: 进程和线程, 并发理论, 并发关键字, Lock 体系, 原子操作类, 发容器 & 并发工具, 线程池, 并发实践 Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的...
### Java线程学习笔记 #### 一、Java进程与线程概述 在Java中,一个JVM(Java虚拟机)实例本质上就是一个进程。进程在Java中由`java.lang.Process`类表示,它允许Java程序与操作系统进行交互,执行外部程序。进程...
Java线程是多任务编程的重要组成部分,它允许程序同时执行多个独立的代码片段,从而提高程序的效率和响应性。本文将深入探讨Java线程的概念、原理以及如何在实际编程中进行有效管理。 首先,我们要了解操作系统中的...
- 生产者-消费者问题:一个线程生产数据,另一个线程消费数据,需要避免生产者过度生产或消费者提前消费。 - 死锁:两个或更多线程互相等待对方释放资源,导致所有线程都无法继续执行。 - 管道(Pipe)和缓冲区...
【Java多线程编程笔记】 Java 多线程编程是Java开发中不可或缺的一部分,它允许程序同时执行多个任务,提高程序的效率和响应性。在深入理解Java多线程之前,我们首先要理解操作系统中的基本概念——进程和线程。 1...
在计算机科学中,多线程是一种编程模型,允许一个应用程序同时执行多个任务。这提高了系统的效率,特别是对于处理大量并发操作的情况。以下是一些关于多线程的重要知识点,特别是关于在Linux和Windows环境下创建和...
本笔记全面涵盖了多线程的学习,包括基础理论和实践代码,旨在帮助开发者深入理解并掌握Java多线程技术。 一、线程基础知识 线程是操作系统分配CPU时间的基本单位,一个进程中可以包含多个线程。Java通过`Thread`类...
Java多线程是Java编程中的核心概念,它允许并发执行多个任务,提高程序的执行效率。以下是关于Java多线程的详细知识点: 1. **创建线程** - **继承Thread类**:创建一个新的类,该类继承自Thread类,并重写run()...
### Java分布式应用学习笔记03:JVM对线程的资源同步和交互机制 在深入探讨Java虚拟机(JVM)如何处理线程间的资源同步与交互机制之前,我们先来明确几个关键概念:线程、多线程、同步、并发以及它们在Java中的实现...
通过提供的"线程学习笔记2.docx"和"线程笔记20140606.docx"文档,你可以更深入地学习线程的这些概念和实践技巧,结合具体的代码示例和实践经验,加深对线程编程的理解。这些文档可能包含了一些实例代码、问题解析、...
1. **线程与进程**:在多任务环境中,线程是执行的基本单元,而进程是资源分配的最小单位。Java中的线程可以通过继承`Thread`类或实现`Runnable`接口来创建。 2. **线程同步**:为了解决多个线程间的竞态条件,Java...
### Java私塾学习笔记整理 #### 第一章:Java入门 **一、Java是什么?** Java是一种广泛使用的高级编程语言,由Sun Microsystems于1995年推出。它旨在为跨平台开发提供一种通用的语言环境,使开发者能够在任何...
- **题3**:模拟三个线程(代表老师)分发学习笔记,可以使用synchronized关键字或Lock接口(如ReentrantLock)确保线程安全地分配资源。 8. **实验结果和分析**: 实验的结果将展示线程并发执行的特点,例如线程...
【Java学习笔记全套】是针对Java编程语言的一套全面学习资料,涵盖了Unix操作系统基础、SQL数据库操作、核心Java编程、Hibernate持久化框架、以及Spring框架等多个关键知识点。这些笔记旨在帮助初学者系统地掌握Java...
### Java学习笔记知识点总结 #### 一、JVM与内存管理 **1.1 JVM基本概念** - **JVM(Java Virtual Machine)**: Java虚拟机是执行Java字节码的虚拟机,它提供了运行Java程序所需的环境。 **1.2 线程** - **线程...
#### 五、Java多线程学习笔记 ##### 1. 线程类 - **Thread类**: - 提供了创建和控制线程的方法。 - 可以通过继承`Thread`类或实现`Runnable`接口来创建线程。 ##### 2. 等待一个线程的结束 - **join()方法**: -...
而线程则是程序执行的最小单元,是进程内部的一条执行路径。多线程是指在一个应用程序中存在多个并发执行的线程,它们共享同一内存空间,这样可以提高程序的执行效率。 在Java中,有三种创建线程的方式: 1. **...
在Java编程语言中,多线程是程序设计中的一个重要概念,尤其在开发高效能和响应迅速的应用时。本文档将全面解析多线程的基础知识,从简单到复杂,帮助开发者深入理解并掌握这一核心技术。 一、多线程基础 1.1 线程...
### CoreJava学习笔记 #### 一、JAVA特点与运行原理 **JAVA特点:** 1. **简单性**:Java的设计者们将C++语言中许多不易理解和容易混淆的部分去除,使得Java更容易理解与掌握。 2. **面向对象**:Java几乎一切都...