一、线程概述
线程是程序运行的基本执行单元。多线程操作系统一个应用程序对应一个线程,而在这个进程中,必须至少建立一个线程(这个线程被称为主线程)来作为这个程序运行的入口点。因此,在操作系统中运行的任何程序都至少有一个主线程。
进程和线程是现代操作系统中两个必不可少的运行模型。在操作系统中可以有多个进程,包括系统进程(由操作系统内部建立的进程)和用户进程(由用户程序建立的进程);一个进程中可以有一个或多个线程。进程和进程之间不共享内存,也就是说系统中的进程是在各自独立的内存空间中运行的。而一个进程中的线可以共享系统分派给这个进程的内存空间。
线程不仅可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段内存空间也叫做线程栈, 是在建立线程时由系统分配的,主要用来保存线程内部所使用的数据,如线程执行函数中所定义的变量。
注意:任何一个线程在建立时都会执行一个函数,这个函数叫做线程执行函数。也可以将这个函数看做线程的入口点。如在Windows中用于建立线程的API函数CreateThread的第三个参数就是这个执行函数的指针。
在操作系统将进程分成多个线程后,这些线程可以在操作系统的管理下并发执行,从而大大提高了程序的运行效率。虽然线程的执行从宏观上看是多个线程同时执行,但实际上这是操作系统在进行线程调度(操作系统为了能提高程序的运行效率,在一个线程空闲时会撤下这个线程,并且会让其他的线程来执行,这种方式叫做线程调度。),由于调度时间非常短非常频繁,所以感觉就像在并发执行。
二、线程给我们带来的好处
如果能合理地使用线程,将会减少开发和维护成本,甚至可以改善复杂应用程序的性能。
1. 充分利用CPU资源
2. 简化编程模型
如果程序只完成一项任务,那只要写一个单线程的程序,并且按着执行这个任务的步骤编写代码即可。但要完成多项任务,如果还使用单线程的话,那就得在在程序中判断每项任务是否应该执行以及什么时候执行。如显示一个时钟的时、分、秒三个指针。使用单线程就得在循环中逐一判断这三个指针的转动时间和角度。如果使用三个线程分另来处理这三个指针的显示,那么对于每个线程来说就是指行一个单独的任务。这样有助于开发人员对程序的理解和维护。
3. 简化异步事件的处理
4. 使GUI更有效率
5. 节约成本
提高程序的执行效率一般有三种方法:
(1)增加计算机的CPU个数。容易做到,昂贵。
(2)为一个程序启动多个进程。实惠,但是不容易共享数据且消耗大量的系统资源。
(3)在程序中使用多进程。弥补了第一种方法的缺点,而又继承了它们的优点。(在默认情况下,一个线程所占的内存空间要远比一个进程所占的内存空间小得多)因此,使用多线程是提高程序执行效率的最廉价的方式。
三、Java的线程模型
Java的线程模型面向对象的。Thread类的run方法是线程执行函数(线程的任务或者工作),还有一个start方法,这个方法负责建立线程(启动)。任何继承Thread的Java类都可以通过Thread类的start方法来建立线程。如果想运行自己的线程执行函数,那就要覆盖Thread类的run方法。还有一个接口Runnable,这个接口只有一个抽象方法run,也就是Java线程模型的线程执行函数。实际上Thread也是继承Runnalbe接口
Java中建立线程有两种方法,一种是继承Thread类,另一种是实现Runnable接口,并通过Thread和实现Runnable的类来建立线程,其实这两种方法从本质上说是一种方法,即都是通过Thread类来建立线程,并运行run方法的。
分享到:
相关推荐
- **多线程概念**:介绍了多线程的基本原理,包括线程与进程的区别、多线程的优势等。 - **多线程架构**:讨论了多线程在不同架构中的实现方式,例如SMP架构下的多线程处理。 - **多线程性能分析**:探讨如何评估...
《Win32多线程程序设计》是一本深入探讨Windows操作系统环境下多线程编程的经典著作,由著名技术翻译家侯捷先生译介。这本书详细介绍了如何在Win32 API下编写高效、稳定的多线程应用程序,是学习和提升Windows系统...
在IT行业中,多线程是程序设计中的一个重要概念,尤其在UI(用户界面)和性能优化方面。在处理复杂的任务时,比如加载大图片或执行耗时操作,使用多线程可以避免阻塞主线程,确保用户界面的流畅性。本问题涉及到的是...
《C++多线程编程实战》是一本深入探讨C++多线程技术的书籍,它主要针对想要在C++环境中实现高效并发程序的开发者。在现代计算机系统中,多线程已经成为不可或缺的一部分,特别是在高性能计算、实时系统以及大规模...
《VC++实现多线程Socket服务器详解》 在IT领域,网络编程是不可或缺的一部分,而Socket编程更是其中的基础。本文将深入探讨如何使用VC++来实现一个基于多线程的Socket服务器,以此来理解网络通信的基本原理和多线程...
《C++网络编程 卷1和卷2 以及Linux多线程服务端编程》是由知名技术专家陈硕编著的一套全面深入的编程教程,涵盖了C++网络编程的基础与高级应用,以及在Linux环境下实现多线程服务端编程的技术精髓。这套教程对于深入...
通过合理利用这些特性,开发人员能够构建出高效、健壮的多线程应用,充分发挥现代多核处理器的并发优势。 以上内容基于给定文件信息的扩展解读,旨在提供一个全面且深入的Posix线程编程指南概览,帮助读者理解线程...
【多线程聊天】是一种在计算机网络编程中常见的实现方式,尤其在构建聊天应用程序时,它能有效地提高系统的并发性能和用户体验。在这个【网络编程实验】中,我们使用了Socket编程来创建一个基于【B/S(浏览器/服务器...
【基于ARM的多线程应用程序设计】 在计算机科学领域,多线程技术是现代操作系统中的重要组成部分,尤其在嵌入式系统中,如基于ARM架构的设备,它能有效地利用处理器资源,提高程序的并发性和执行效率。这篇开放性...
标题中的“官方例子air与fp版 air的桌面应用里可以有多线程(转)”指出,这个内容主要涉及Adobe AIR技术,特别是针对桌面应用的多线程实现。Adobe AIR(Adobe Integrated Runtime)允许开发者创建跨平台的桌面应用...
进程、线程和协程是计算机程序执行的三种基本单元,它们在多任务处理和并发执行方面具有不同的特性和用途。下面将详细阐述这三者的概念、特点以及它们之间的区别。 1. 进程(Process) 进程是操作系统资源分配的...
本文将详述“FX三菱上位机通讯多线程2合一实例”中的关键知识点,帮助读者理解如何在单线程和多线程环境中实现与FX系列PLC的有效通信。 首先,我们关注的是“FX系列上位机通讯”。FX系列是三菱电机推出的一系列小型...
本论文以陕西省自然科学基金项目(2001年度)—软件逆向工程技术研究为背景,提出了一种软件再设计(redesign)方法,它以面向对象的分析和设计为指导,详述了Windows编程的一个应用领域:多线程通信技术。基于微软基础...
本文将详述“一种降低动态冗余多线程性能和功耗开销的方法及系统”,这一主题涉及到计算机架构、多线程技术、性能优化以及能源效率。 动态冗余多线程(Dynamic Redundant Multithreading,简称DRMT)是一种处理机制...
《Linux多线程服务端编程:使用muduo+C++网络库》这本书是陈硕的作品,专注于讲解如何在Linux环境中构建高效、稳定的多线程服务器端应用。这本书结合了网络编程、操作系统理论以及C++语言特性,为读者提供了一套完整...
Pthread是POSIX线程库,它为C和C++编程提供了多线程支持,使得在单个进程中可以并发地执行多个线程,从而提高程序的执行效率。 **2.2 多线程介绍** **2.2.1 多线程出现的原因** 多线程技术的诞生主要是为了解决...
通过Java线程的学习,开发者能够更好地掌握如何在Java中创建、管理和控制线程,以及如何处理多线程环境下的数据共享和同步问题。 #### 描述解读:Java线程学习 描述中的“Java线程学习”强调了对Java线程概念和...
通过本教程的学习,您应该已经掌握了Pthreads的基础知识,能够编写简单的多线程程序。接下来,您可以进一步探索更高级的主题,如高级同步机制、性能优化技巧等。此外,还可以参考相关的文档和在线资源,以获得更多的...
### Java问题定位技术+性能优化知识点详述 #### 一、Java线程堆栈分析 **1.1 如何输出线程堆栈?** - **命令行方式**: 使用`jstack`命令可以输出指定Java进程的线程堆栈信息。 - `jstack <pid>`: 输出指定PID的...