Java的多线程技术探讨

时间:2022-05-11 03:32:33

Java的多线程技术探讨

摘 要 本文以Java的多线程为研究对象,阐述了Java线程的同步机制、模型及调度,讨论了Java 在语言级对多线程的支持,并对Java环境下多线程程序的开发及应用进行了较深入的探讨。

关键词 进程 线程 同步 Java

1 引言

Java是一种纯面向对象的编程语言, 它除了具有可移植性、安全性、平台无关性等优点外,其内置的多线程机制是传统的C和C++所不具有的,Java虚拟机的很多任务都依赖线程调度。如能很好地利用线程,可以大大简化应用程序设计,本文详细探讨了Java的多线程技术。

2 线程的相关概念

2.1线程与进程的概念

进程(Process)是应用程序在内存环境中基本的执行单元。在Java中,进程是有不同的地址空间且处在可执行状态中的应用程序, 从用户角度来看,进程是应用程序的一个执行过程。线程(Thread)是指进程中某个单一的顺序控制流程。新兴的操作系统,如Mac、Windows NT等大多采用多线程的概念,把线程视为基本执行单位。

2.2线程与进程的区别

线程与进程一样,都有其执行的开始、顺序和结束, 执行期间的任一时刻都有一个执行点。进程与线程的重要区别之一在于线程不能够单独执行,它必须运行在处于活动状态的应用程序进程中,因此可以定义线程是程序内部的具有并发性的顺序代码流。每个进程都可以同时有执行不同任务的多个线程。多线程的意义在于一个应用程序的多个逻辑单元可以并发地执行,但并不意味着多个用户进程在执行,操作系统也不把每个线程作为独立的进程来分配独立的系统资源。

线程与进程区别之二在于二者的通信不同。进程可以创建子进程,父子进程拥有不同的可执行代码和数据内存空间,因此进程间通信复杂,可能需要管道、消息队列、共享内存或信号处理来保证进程间的通信,不仅费时而且有限。而一个进程中的各线程因为共享地址空间, 所以它们之间的通信是非常简单而有效的, 线程仅是过程调用,它们彼此独立执行,拥有独立的执行堆栈和程序执行上下文。

2.3线程的生命周期及其状态转换

在Java语言中, 线程自创建后就处于其生命周期中, 程序可以对线程进行各种控制操作,包括启动、终止、挂起、恢复等, 相应地, 线程在不同的生命阶段因为对其施加的操作不同就有不同的状态。图1给出了线程可能的各种状态以及从一个状态转化为另一种状态时需要进行的控制操作。Java线程在其生命周期中,共有五种线程状态, 如图1所示。

(1) Newborn是线程已被创建但尚未执行的状态。此时线程对象已被分配内存空间,其私有数据已被初始化,线程对象可通过start( ) 方法调度,或者利用stop( )方法取消,新创建的线程一旦被调度, 就将切换到Runnable状态。

(2) Runnable是线程的就绪状态,表示线程正等待处理器资源,随时等待处理机调度执行。处于就绪状态的线程事实上已被调度,线程依据自身优先级进入等待队列,等待线程调度系统给分配CPU时间。处于就绪状态的线程何时可真正执行, 取决于线程优先级以及队列的当前状况。

上一篇:案例教学法在数据库原理课程中的应用 下一篇:孙立和她的数字水墨情结