"多线程设计与实现:方法、状态、调度与通信"

需积分: 0 0 下载量 116 浏览量 更新于2024-02-01 收藏 746KB PDF 举报
第8章 多线程设计1;第8章 多线程设计多线程机制线程通信22 October 2019多线程机制v线程就是应用程序中的一个可执行线索,多线程就是同一个应用程序中有多个可执行线索,它;电子科技大学信息与软件工程学院22 October 20191面向对象程序设计Java江春华UESTC22 October 20192内 容1多线程实现方法2多线程状态及调度3线程同步4第8章 多线程设计多线程机制5线程通信UESTC22 October 20193多线程机制v线程就是应用程序中的一个可执行线索,多线程就是同一个应用程序中有多个可执行线索,它们可以并发执行。v多线程就是同一程序中多个任务的并发实现。v同类的多个线程是共享一块内存空间和一组系统资源,而线程本身的数据通常只有微处理器的寄存器数据,以及一个供程序执行时使用的堆栈。UESTC22 October 20194多线程机制v线程与进程相似,是一段完成某个特定功能的代码,是程序中单个顺序的流控制。v系统在产生一个线程,或者在各个线程之间切换时,负担要比进程小的多。v一个进程中可包含多个线程,线程被称为轻负荷进程(light-weight process)。UESTC22 October 20195多线程机制v进程与线程之间的差别主要体现在两个方面:Ø 作为基本的执行单元,线程的划分比进程小,因此,支持多线程的系统要比进程支持的系统更创建这样一个线程的进程,并为它提供运行环境。同时,线程在创建之初就已经获得了其它线程释放的资源。 线程的实现方法有多种,可以通过继承Thread类或者实现Runnable接口来创建线程。通过继承Thread类,在类中重写run()方法来定义线程的执行逻辑,然后调用start()方法来启动线程。实现Runnable接口则需要实现run()方法,并将其作为参数传递给Thread类的构造函数来创建线程。无论使用哪种实现方法,都需要调用start()方法来启动线程。 多线程的状态及调度是指线程在不同生命周期中的状态以及系统通过调度算法来控制线程的执行情况。多线程程序中的线程可以处于多种不同的状态,包括新建状态、就绪状态、运行状态、阻塞状态和死亡状态。系统通过调度算法来决定哪个线程获得执行权,以及何时将执行权转移给其他线程。 线程同步是指多个线程之间的协调和合作,在多线程程序中,如果多个线程同时访问共享资源,可能会引发数据不一致或者竞态条件等问题。为了解决这些问题,需要使用线程同步机制来保证线程之间的有序执行。常见的线程同步机制有互斥锁、信号量、条件变量等。 线程通信是指多个线程之间通过共享内存或者消息传递来传递信息和控制执行流程。线程通信的主要目的是实现线程之间的协作和协调工作。通过共享内存的方式,线程可以通过共享变量来进行信息传递和控制流程,但需要保证线程对共享变量的访问是线程安全的。通过消息传递的方式,不同线程之间通过发送和接收消息来进行通信,消息传递可以是同步的或者异步的。 总之,多线程设计是一种实现程序并发执行、提高系统性能的重要手段。通过合理设计多线程的实现方法、管理线程的状态和调度、保证线程之间的同步和通信,可以有效地提高程序的执行效率和响应能力,从而实现更好的用户体验和系统性能。在Java等面向对象程序设计中,多线程设计是一个重要的主题,也是开发者必备的技能之一。
2023-05-29 上传
第8章 多线程编程 第1页 本章概述 本章的学习目标 主要内容 Java程序设计案例教程-第8章-多线程编程全文共36页,当前为第1页。 本章概述 前面我们所开发的程序大多是单线程的,即一个程序只有一条从头到尾的执行路线。然而,现实世界中的很多事务都是有多种途径同时运作的,例如:服务器可能需要同时处理多个客户机的请求,这就需要有多个线程同时在工作。多线程编程使得系统资源并不是由某个执行体独占,而是由多个执行单元共同拥有,轮换使用。正确使用多线程可以消除系统的瓶颈问题,提高整个应用系统的性能。本章将详细介绍Java语言的多线程技术。通过本章的学习,读者应该理解线程和进程的区别,掌握Java的多线程编程技术,了解线程的同步和线程间通信等内容。 第2页 Java程序设计案例教程-第8章-多线程编程全文共36页,当前为第2页。 本章的学习目标 了解进程和线程的基本概念和区别 掌握创建线程的两种方法 掌握线程同步的概念和方法 了解线程的优先级 掌握线程间通信的方法 第3页 Java程序设计案例教程-第8章-多线程编程全文共36页,当前为第3页。 第4页 主要内容 8.1 Java线程模型 8.2 创建线程 8.3 同步与线程间通信 8.4 获取线程状态 8.5 本章小结 8.6 思考和练习 Java程序设计案例教程-第8章-多线程编程全文共36页,当前为第4页。 8.1 Java线程模型 Java对多线程编程(multithreaded programming)提供了内置支持。多线程程序包含同时运行的两个或多个部分。这种程序的每一部分被称为一个线程,并且每个线程定义了单独的执行路径。因此,多线程是特殊形式的多任务处理。 第5页 Java程序设计案例教程-第8章-多线程编程全文共36页,当前为第5页。 进程 进程本质上是正在执行的程序。在UNIX操作系统中,每个应用程序的执行都在操作系统内核中登记一个进程标志,操作系统根据分配的标志对应用程序的执行进行调度和系统资源分配。每个进程都有自己的内存单元,进程之间是互相独立的,一个进程一般不允许访问其他进程的内存空间,因此,进程间通信非常困难。 基于进程的多任务处理就是允许计算机同时运行两个或更多个程序的特性。例如,基于进程的多任务处理可以在运行Java编译器的同时使用文本编辑器或浏览网站。在基于进程的多任务处理中,程序是调度程序能够调度的最小代码单元。 第6页 Java程序设计案例教程-第8章-多线程编程全文共36页,当前为第6页。 线程 线程是比进程更小的执行单位。如果将进程概念一分为二,则进程中的系统资源,可以看成是一个静态的对象;而程序代码的执行位置,可以看成一个动态对象,这个动态的部分就是线程。进程在执行过程中拥有独立的内存单元,而多个线程共享内存,线程之间的通信比较容易解决,从而极大地提高了程序的运行效率。 在基于线程的多任务环境中,最小的可调度代码单元是线程,这意味着单个程序可以同时执行两个或更多个任务。例如,文本编辑器可以在打印的同时格式化文本,只要这两个动作是通过两个独立的线程执行即可。 第7页 Java程序设计案例教程-第8章-多线程编程全文共36页,当前为第7页。 进程和线程的区别 进程和线程的区别可以总结为如下几点: 一个程序至少有一个进程,一个进程至少有一个线程,线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。 线程在执行过程中与进程也是有区别的,每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口;但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程的执行控制。 一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。 第8页 Java程序设计案例教程-第8章-多线程编程全文共36页,当前为第8页。 Java中的线程 Java运行时系统在许多方面依赖于线程,并且所有类库在设计时都考虑了多线程。事实上,Java通过利用线程使得整个环境能够异步执行。 在过去几年,多核系统已经变得很普遍了。当然,单核系统仍然在广泛使用。Java的多线程系统在这两种类型的系统中都可以工作。在单核系统中,并发执行的线程共享CPU,每个线程得到一片CPU时钟周期。所以,在单核系统中,两个或更多个线程不是真正同时运行的,但是空闲时间被利用了。然而,在多核系统中,两个或多个线程可能是真正同步执行的。 第9页 Java程序设计案例教程-第8章-多线程编程全文共36页,当前为第9页。 线程的状态 线程有多种状态:线程可以处于运行(running)状态,只要获得CPU时间就准备运行。运行的线程可以被挂起(suspended),这会临时停止线程的活动。挂起的线程可以被恢复(resumed),从而允许线程从停止处恢复执行。当等待
2024-12-28 上传