`

Java线程学习笔记(一):进程与线程

    博客分类:
  • Java
阅读更多

一、概念

 

进程:系统资源分配的基本单位,又是调度运行的基本单位。

        例如,用户运行了一个程序,系统就为该程序创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。然后,该进程放入进程的就绪队列,进程调度程序选中它,并为它分配CPU以及其它资源,该进程才真正运行,所以,进程是系统系统中并发执行的单位。

        在Mac、Windows NT采用微内核结构的操作系统中,进程的功能发生了变化,它只是资源分配的单位,而不再是调度运行的单位,在微内核系统中真正调度运行的基本单位是线程,因此,实现并发功能的是线程。

 

线程:线程是进程中执行运算的最小单位(亦即执行处理器调度的基本单位),线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的方法(函数)。

        如果把进程理解为在逻辑上操作系统所完成的任务,那么线程表示完成该任务的许多可能的子任务之一。

        例如,假设用户启动了一个窗口中的数据库应用程序,操作系统将对数据库的调用表示为一个进程。

        假设用户要从数据库中产生一份工资单报表,并传到一个文件中,这是一个子任务;在产生工资单报表的过程中,用户又可以输入数据库查询请求,这又是一个子任务。这样,系统则把每一个请求——工资单报表和新输入的数据库查询,表示为数据库进程中的独立线程。

        线程可以在处理器上独立调度执行,这样在多处理器环境下,就允许几个线程各自在单独的处理器上运行。操作系统提供线程就是为了方便而有效的实现这种并发性。

 

多线程:多线程是指程序中包含多个执行流。即在一个程序中可以运行多个不同的线程来执行多个不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。

 

二、内存

 

每一个进程都从一个主线程开始执行,但可以在它拥有的线程中创建额外的线程。

一个进程的所有线程共享进程的虚拟地址空间和系统资源,一个线程的资源包括线程的机器寄存器设置,内核堆栈,线程环境变量和进程虚拟地址中的用户堆栈。

 

三、引入线程的好处

  1. 易于调度
  2. 提供并发性。通过线程可以方便有效的实现并发。进程可创建多个线程来执行同一程序的不同部分。
  3. 开销少。创建线程比创建进程要快,所以开销很少。
  4. 利于充分发挥多处理器的功能。通过创建多线程进程(即一个进程可以具有两个或更多个线程),每个线程在一个处理器上运行,从而实现应用程序的并发性,使每个处理器都得到充分利用。

四、进程与线程的关系

  1. 一个程序至少有一个进程;一个进程可以多个线程,但至少要有一个线程;一个线程只能属于一个进程。
  2. 资源分配给进程,同一个进程中的所有线程共享该进程的所有资源。
  3. 处理器分配给线程,即真正在处理器上运行的是线程
  4. 线程在执行过程中,要求协作同步。不同进程的线程间,要利用消息通讯的办法实现同步。

五、多线程的优劣

 

优点:可以提高CUP的利用率。在多线程的程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样大大提高了程序的执行效率,同时也提高了系统资源的利用率。

 

缺点:

  • 线程也是程序,所以线程需要占用内存,线程越多占用内存也越多;
  • 多线程需要协调和管理,所以需要CPU时间跟踪线程;
  • 线程之间对共享资源的访问会相互影响,必须解决公用共享资源的问题;
  • 线程太多会导致控制太复杂,最终可能造成很多bug;

Java线程学习笔记(二):线程的创建

 

注:本文源自互联网,经过查阅网上资料整理而成,如涉及到他人整理的成果,在此表示感谢。由于涉及到的参考文章比较多,在此就不再一一列举。

本文是目前个人理解的结果,仅供参考,如后续发现问题,本人会进行相应的更正,也欢迎各位对Java线程感兴趣的朋友或者前辈进行指正。

分享到:
评论

相关推荐

    JAVA 多线程学习笔记

    这篇学习笔记将深入探讨Java多线程的核心概念、实现方式以及相关工具的使用。 一、多线程基础 1. 线程与进程:在操作系统中,进程是资源分配的基本单位,而线程是程序执行的基本单位。每个进程至少有一个主线程,...

    Java 并发学习笔记:进程和线程,并发理论,并发关键字,Lock 体系,原子操作类,发容器 & 并发工具,线程池,并发实践

    Java 并发学习笔记: 进程和线程, 并发理论, 并发关键字, Lock 体系, 原子操作类, 发容器 & 并发工具, 线程池, 并发实践 Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的...

    java线程学习笔记

    ### Java线程学习笔记 #### 一、Java进程与线程概述 在Java中,一个JVM(Java虚拟机)实例本质上就是一个进程。进程在Java中由`java.lang.Process`类表示,它允许Java程序与操作系统进行交互,执行外部程序。进程...

    java多线程笔记

    Java线程是多任务编程的重要组成部分,它允许程序同时执行多个独立的代码片段,从而提高程序的效率和响应性。本文将深入探讨Java线程的概念、原理以及如何在实际编程中进行有效管理。 首先,我们要了解操作系统中的...

    Java多线程详解(超详细)_狂神说笔记完整版_项目代码_适合小白随课程学习

    - 生产者-消费者问题:一个线程生产数据,另一个线程消费数据,需要避免生产者过度生产或消费者提前消费。 - 死锁:两个或更多线程互相等待对方释放资源,导致所有线程都无法继续执行。 - 管道(Pipe)和缓冲区...

    多线程学习笔记,关于创建线程,删除线程等相关指令的应用。

    在计算机科学中,多线程是一种编程模型,允许一个应用程序同时执行多个任务。这提高了系统的效率,特别是对于处理大量并发操作的情况。以下是一些关于多线程的重要知识点,特别是关于在Linux和Windows环境下创建和...

    java多线程笔记全手打

    本笔记全面涵盖了多线程的学习,包括基础理论和实践代码,旨在帮助开发者深入理解并掌握Java多线程技术。 一、线程基础知识 线程是操作系统分配CPU时间的基本单位,一个进程中可以包含多个线程。Java通过`Thread`类...

    JAVA多线程学习笔记整理(csdn)————程序.pdf

    Java多线程是Java编程中的核心概念,它允许并发执行多个任务,提高程序的执行效率。以下是关于Java多线程的详细知识点: 1. **创建线程** - **继承Thread类**:创建一个新的类,该类继承自Thread类,并重写run()...

    Java分布式应用学习笔记03JVM对线程的资源同步和交互机制

    ### Java分布式应用学习笔记03:JVM对线程的资源同步和交互机制 在深入探讨Java虚拟机(JVM)如何处理线程间的资源同步与交互机制之前,我们先来明确几个关键概念:线程、多线程、同步、并发以及它们在Java中的实现...

    线程学习实例和笔记

    通过提供的"线程学习笔记2.docx"和"线程笔记20140606.docx"文档,你可以更深入地学习线程的这些概念和实践技巧,结合具体的代码示例和实践经验,加深对线程编程的理解。这些文档可能包含了一些实例代码、问题解析、...

    Java并发编程学习笔记.rar

    1. **线程与进程**:在多任务环境中,线程是执行的基本单元,而进程是资源分配的最小单位。Java中的线程可以通过继承`Thread`类或实现`Runnable`接口来创建。 2. **线程同步**:为了解决多个线程间的竞态条件,Java...

    java私塾学习笔记整理

    ### Java私塾学习笔记整理 #### 第一章:Java入门 **一、Java是什么?** Java是一种广泛使用的高级编程语言,由Sun Microsystems于1995年推出。它旨在为跨平台开发提供一种通用的语言环境,使开发者能够在任何...

    Java实验9多线程设计.doc

    - **题3**:模拟三个线程(代表老师)分发学习笔记,可以使用synchronized关键字或Lock接口(如ReentrantLock)确保线程安全地分配资源。 8. **实验结果和分析**: 实验的结果将展示线程并发执行的特点,例如线程...

    达内java学习笔记全套

    【Java学习笔记全套】是针对Java编程语言的一套全面学习资料,涵盖了Unix操作系统基础、SQL数据库操作、核心Java编程、Hibernate持久化框架、以及Spring框架等多个关键知识点。这些笔记旨在帮助初学者系统地掌握Java...

    阿里P8 架构师整理Java学习笔记.pdf

    ### Java学习笔记知识点总结 #### 一、JVM与内存管理 **1.1 JVM基本概念** - **JVM(Java Virtual Machine)**: Java虚拟机是执行Java字节码的虚拟机,它提供了运行Java程序所需的环境。 **1.2 线程** - **线程...

    Java多线程文章系列.pdf

    #### 五、Java多线程学习笔记 ##### 1. 线程类 - **Thread类**: - 提供了创建和控制线程的方法。 - 可以通过继承`Thread`类或实现`Runnable`接口来创建线程。 ##### 2. 等待一个线程的结束 - **join()方法**: -...

    多线程学习笔记.docx

    而线程则是程序执行的最小单元,是进程内部的一条执行路径。多线程是指在一个应用程序中存在多个并发执行的线程,它们共享同一内存空间,这样可以提高程序的执行效率。 在Java中,有三种创建线程的方式: 1. **...

    多线程笔记_java/多线程_

    在Java编程语言中,多线程是程序设计中的一个重要概念,尤其在开发高效能和响应迅速的应用时。本文档将全面解析多线程的基础知识,从简单到复杂,帮助开发者深入理解并掌握这一核心技术。 一、多线程基础 1.1 线程...

    CoreJava学习笔记

    ### CoreJava学习笔记 #### 一、JAVA特点与运行原理 **JAVA特点:** 1. **简单性**:Java的设计者们将C++语言中许多不易理解和容易混淆的部分去除,使得Java更容易理解与掌握。 2. **面向对象**:Java几乎一切都...

Global site tag (gtag.js) - Google Analytics