一般来说,我们把正在计算机中执行的程序叫做"进程"(Process) ,而不将其称为程序(Program)。所谓"线程"(Thread),是"进程"中某个单一顺序的控制流。新兴的操作系统,如Mac,
Windows NT,
Windows 95等,大多采用多线程的概念,把线 程视为基本执行单位。线程也是
Java中的相当重要的组成部分之一。
甚至最简单的Applet也是由多个线程来完成的。在Java中,任何一个Applet的paint()和update()方法都是由AWT(Abstract Window Toolkit)绘图与事件处理线程调用的,而Applet 主要的里程碑方法——init(),start(),stop()和destory() ——是由执行该Applet的应用调用的。
单线程的概念没有什么新的地方,真正有趣的是在一个程序中同时使用多个线程来完成不同的任务。某些地方用轻量进程(Lightweig ht Process)来代替线程,线程与真正进程的相似性在于它们都是单一顺序控制流。然而线程被认为轻量是由于它运行于整个程序的上下文内,能使用整个程序共有的资源和程序环境。
作为单一顺序控制流,在运行的程序内线程必须拥有一些资源作为必要的开销。例如,必须有执行堆栈和程序计数器在线程内执行的代码只在它的上下文中起作用,因此某些地方用"执行上下文"来代替"线程"。
线程属性
为了正确有效地使用线程,必须理解线程的各个方面并了解Java 实时系统。必须知道如何提供线程体、线程的生命周期、实时系统如何调度线程、线程组、什么是幽灵线程(Demo nThread)。
(1)线程体
所有的操作都发生在线程体中,在Java中线程体是从Thread类继承的run()方法,或实现Runnable接口的类中的run()方法。当线程产生并初始化后,实时系统调用它的run()方法。run()方法内的代码实现所产生线程的行为,它是线程的主要部
分。
(2)线程状态
附图表示了线程在它的生命周期内的任何时刻所能处的状态以及引起状态改变的方法。这图并不是完整的有限状态图,但基本概括了线程中比较感兴趣和普遍的方面。以下讨论有关线程生命周期以此为据。
●新线程态(New Thread)
产生一个Thread对象就生成一个新线程。当线程处于"新线程"状态时,仅仅是一个空线程对象,它还没有分配到系统资源。因此只能启动或终止它。任何其他操作都会引发异常。
●可运行态(Runnable)
start()方法产生运行线程所必须的资源,调度线程执行,并且调用线程的run ()方法。在这时线程处于可运行态。该状态不称为运行态是因为这时的线程并不总是一直占用处理机。特别是对于只有一个处理机的PC而言,任何时刻只能有一个处于可运行态的线程占用处理 机。Java通过调度来实现多线程对处理机的共享。
●非运行态(Not Runnable)
当以下事件发生时,线程进入非运行态。
①suspend()方法被调用;
②sleep()方法被调用;
③线程使用wait()来等待条件变量;
④线程处于I/O等待
●死亡态(Dead)
当run()方法返回,或别的线程调用stop()方法,线程进入死亡态 。通常Applet使用它的stop()方法来终止它产生的所有线程。
(3)线程优先级
虽然我们说线程是并发运行的。然而事实常常并非如此。正如前面谈到的,当系统中只有一个CPU时,以某种顺序在单CPU情况下执行多线程被称为调度(scheduling)。Java采用的是一种简单、固定的调度法,即固定优先级调度。这种算法是根据处于可运行态线程的相对优先级来实行调度。当线程产生时,它继承原线程的优先级。在需要时可对优先级进行修改。在任何时刻,如果有多条线程等待运行, 系统选择优先级最高的可运行线程运行。只有当它停止、自动放弃、或由于某种原因成为非运行态低优先级的线程才能运行。如果两个线程具有相同的优先级,它们将被交替地运行。
Java实时系统的线程调度算法还是强制性的,在任何时刻,如果一个比其他线程优先级都高的线程的状态变为可运行态,实时系统将选择该线程来运行。
(4)幽灵线程
任何一个Java线程都能成为幽灵线程。它是作为运行于同一个进程内的对象和线程的服务提供者。例如,HotJava浏览器有一个称为" 后台图片阅读器"的幽灵线程,它为需要图片的对象和线程从文件系统或网络读入图片。幽灵线程是应用中典型的独立线程。它为同一应用中的其他对象和线程提供服务。幽灵线程的run()方法一般都是无限循环,等待服务请求。
(5)线程组
每个Java线程都是某个线程组的成员。线程组提供一种机制,使得多个线程集于一个对象内,能对它们实行整体操作。譬如,你能用一个方法调用来启动或挂起组内的所有线程。Java线程组由ThreadGroup类实现。当线程产生时,可以指定线程组或由实时系统将其放入某个缺省的线程组内。线程只能属于一个线程组,并且当线程产生后不能改变它所属的线程组。
相关推荐
Java 线程知识深入解析 Java 线程知识深入解析是一种重要的组成部分之一,在 Java 中,任何一个 Applet 的 paint() 和 update() 方法都是由 AWT(Abstract Window Toolkit) 绘图与事件处理线程调用的,而 Applet ...
《Java线程知识深入解析》 Java线程是软件开发中的核心概念,特别是在多任务处理和并发编程中扮演着至关重要的角色。线程是进程中的单一顺序控制流,是操作系统调度的基本单元。在Java中,线程是程序执行的核心组成...
本文将深入解析Java线程的相关知识点,包括线程的定义、创建、状态管理、线程同步和安全问题。 1. **线程定义** 在Java中,线程是进程中的单一顺序控制流,是程序执行的基本单元。线程在进程的上下文中运行,共享...
本文将深入解析Java线程的核心概念、创建方式、生命周期、同步机制以及线程管理策略。 首先,Java线程的创建主要有两种方式:通过实现Runnable接口和继承Thread类。实现Runnable接口使得类可以与其他接口一起实现,...
本文将深入探讨Java多线程的各个方面,包括基础知识、创建线程、线程同步与通信、死锁问题以及线程池。 1. **基础知识** - **线程与进程**:线程是操作系统分配CPU时间的基本单位,而进程是系统中运行的程序实例。...
Java线程、线程池和XML解析是Java编程中至关重要的三个概念,它们在实际开发中扮演着不可或缺的角色。下面将分别对这三个主题进行深入的介绍。 首先,我们来看Java线程。线程是程序执行的最小单位,一个进程可以...
本文将深入解析Java多线程,帮助你快速掌握这一关键技能。 首先,我们要明白什么是线程。线程是操作系统调度的基本单位,每个线程都有自己的程序计数器、栈、局部变量和状态,它们共享同一块内存空间,即进程的内存...
### Java多线程操作数据库:深入解析与应用 在当今高度并发的应用环境中,Java多线程技术被广泛应用于处理数据库操作,以提升系统的响应速度和处理能力。本文将基于一个具体的Java多线程操作数据库的应用程序,深入...
### Java线程详解:基础知识与应用实践 #### 线程概念解析 Java线程,作为Java编程语言中的一项核心特性,为实现并发处理提供...因此,深入理解和熟练掌握Java线程的管理和使用,对于成为优秀的Java开发者至关重要。
书中会深入解析线程池的配置参数和工作原理。 6. **死锁与活锁**:多线程环境下可能遇到的并发问题,如死锁、活锁、饥饿等,书会分析它们的产生原因和解决策略。 7. **线程性能优化**:如何通过合理的设计和配置来...
本文将深入探讨Java线程停止的方法,特别是通过一个示例代码片段来解析如何利用标志变量(Flag)控制线程的生命周期,以及这种方法背后的原理与最佳实践。 ### Java线程停止方法概述 在Java中,直接调用线程的`...
"Java Threads,2ed Edition.pdf"是第二版的线程指南,虽然版本较旧,但依然包含了基础的线程知识,对于理解Java线程的基本原理和早期版本的特性非常有帮助。书中可能探讨了Java早期的线程模型,以及如何在多线程环境...
《JAVA多线程教学演示系统》是一篇深入探讨JAVA多线程编程的论文,它针对教育领域中的教学需求,提供了一种生动、直观的演示方式,帮助学生更好地理解和掌握多线程技术。这篇论文的核心内容可能包括以下几个方面: ...
本文旨在深入解析Java线程的理论基础、应用场景及其实现机制,帮助Java开发者更好地理解和运用这一关键特性。 #### 二、Java线程基础知识 **1. 什么是线程?** 线程是操作系统能够进行运算调度的最小单位,它被...
10. **Java内存模型**:深入解析Java内存模型(JMM),包括可见性、有序性和原子性,以及它们如何影响多线程程序的行为。 通过阅读《Java线程——第三版》,读者将能够掌握Java平台上的多线程编程技术,解决实际...
本文将从给定的文件标题、描述、标签以及部分内容出发,深入探讨Java中线程的相关知识点。 ### Java中的线程基础 #### 1. 什么是线程? 在计算机科学中,线程是指进程中的一个执行单元,它是进程内部的基本调度...
这份“Java多线程的经典资料.rar”压缩包包含了一份名为“Java线程.pdf”的文档,很可能是关于Java多线程的详细教程或深入解析。 在Java中,多线程主要涉及以下几个关键知识点: 1. **线程创建**:Java提供了多种...
本文将深入探讨Java的中高级核心知识,涵盖语言基础、面向对象特性、核心技术等多个方面。 **1. Java语言特点** Java语言的主要特点是:简单性、面向对象、健壮性、安全性、高效性、可移植性、多线程支持以及动态性...
本文将深入探讨Java的核心知识,包括JVM(Java虚拟机)、线程、集合、数据库、算法以及负载均衡等多个方面。 首先,让我们从Java虚拟机(JVM)开始。JVM是Java程序运行的基石,它负责解析字节码并执行。理解JVM的...