Java高级程序设计实战教程第六章 Java多线程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6.2.2 线程的创建和启动
线程的创建有两种方式:通过继承Thread类来和通过实现Runnable接口来 创建。 1.继承Thread类创建线程类 通过继承Thread类创建线程类的具体步骤和具体代码如下:
• 定义一个继承Thread类的子类,并重写该类的run()方法; • 创建Thread子类的实例,即创建了线程对象; • 调用该线程对象的start()方法启动线程。 2.实现Runnable接口创建线程类 通过实现Runnable接口创建线程类的具体步骤和具体代码如下: • 定义Runnable接口的实现类,并重写该接口的run()方法; • 创建Runnable实现类的实例,并以此实例作为Thread的target对象,即该 Thread对象才是真正的线程对象。 •调用该线程对象的start()方法启动线程。
在这里,生产者是一个线程,消费者是一个线程。仓库容量有限,只有库满时生产者不能存放,库空时消费 者不能取产品,这就是线程的同步。
3.客户机/服务器通信问题。 假如Server只能接受一个Client请求,当第一个Client连接后就占据了这个位置,后续Client不能再继续连接。 采用多线程机制,当Server每接受到一个Client连接请求之后,都把处理流程放到一个独立的线程里去运行, 然后等待下一个Client连接请求,这样就不会阻塞Server端接收请求了。
Java高级程序设计
第ห้องสมุดไป่ตู้章 Java多线程
6.1 应用场景 6.3 实施过程 6.5 拓展训练 6.7 课后习题
6.2 相关知识 6.4 拓展知识 6.6 课后小结 6.8 上机实训
6.1 应用场景
计算机可以同时完成多项任务,称为并发。并发完成的每个任务就是一个独立线程。在网络分布式、高并发 应用程序的情况下,Java多线程编程技术在很多开发工作中得到非常广泛的应用。经典的多线程问题: 1.火车票预订问题。 假定火车票有10000张,现有10个售票点。每个售票窗口就像一个线程,它们各自运行,共同访问相同的数 据——火车票的数量。由于多个线程并发地执行,访问共享同一数据,会出现数据不一致的现象,所有必须 要用同步锁synchronized,保证某一时刻只能有一个线程执行售票功能。 2.经典生产者与消费者问题。 生产者不断的往仓库中存放产品,消费者从仓库中消费产品。其中生产者和消费者都可以有若干个。
6.2 相关知识
6.2.1 相关概念 6.2.2 线程的创建和启动 6.2.3 线程的生命周期 6.2.4 线程的管理
6.2.1 相关概念
进程是指运行中的应用程序,每个进程都有自己独立的内存空间。一个应用程序可以同时启动多个线程。
几乎所有的操作系统都支持同时运行多个任务,一个任务通常就是一个程序,每个运行中的程序就是一个进程。当一个程序运行时,内部可能包含 了多个顺序执行流,每个顺序执行流就是一个线程。一个进程可以由多个线程组成,即在一个进程中可以同时运行多少不同的线程,他们分别执行 不同的任务。当进程内的多个线程同时运行时,这种运行方式被称为并发运行。 进程(Process):是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期 面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组 织形式的描述,进程是程序的实体。 进程的特征特征 动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。 并发性:任何进程都可以同其他进程一起并发执行 独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位; 异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进 结构特征:进程由程序、数据和进程控制块三部分组成。 多个不同的进程可以包含相同的程序:一个程序在不同的数据集里就构成不同的进程,能得到不同的结果;但是执行过程中,程序不能发生改变。 线程(Thread):有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC), 寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行 中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程 之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。就绪状态是指线程具 备运行的所有条件,逻辑上可以运行,在等待处理机;运行状态是指线程占有处理机正在运行;阻塞状态是指线程在等待一个事件(如某个信号 量),逻辑上不可执行。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。 线程是程序中一个单一的顺序控制流程。进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程序的调度 单位。在单个程序中同时运行多个线程完成不同的工作,称为多线程。 简单的说:一个程序运行后至少有一个进程,一个进程里可以包含多个线程,但至少包含一个线程。 多线程(multithreading):是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多 于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理(Chip-level multithreading)或同 时多线程(Simultaneous multithreading)处理器。 在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多 线程处理(Multithreading)”。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。 在实际的应用中,多线程是非常有用的,一个浏览器必须能同时下载多个图片:一个Web服务器必须能同时响应多个用户请求;Java虚拟机本身就 在后台提供一个超级线程来进行垃圾回收。总之,多线程在实际编程中的应用是非常广泛的。