admin 管理员组

文章数量: 1087139


2024年3月19日发(作者:no stacking)

维普资讯

i 

浅 

议 

c- 

雩 

J a v a的多线程卿技术 

∞ 

的 

多 

Tentative DiSCUSSion on the Java MultiThread Implementation Technology 线 

程 

实 

程小扬朱隆尹 现 

 

 (赣南师范学院数学与计算机系,赣州

Cheng xi aoyang 

技 

341 ooo) 术 

(Maths and Computer Dept,Gannan Normal Col lege,GanZhou 341000) 

摘要:本文阐述了多线程的概念以及对线程的状态、创建和控制方法,对Java环境下的线程同步机制作了深入的探讨。 

关键词:多线程:Java;同步机制 

中图分类号:TP3l1.52 文献标识码:A 文章编号:l671—4792一(2006)2—008l一02 

 }

Abstract:ThiS paper explains the concept of mulithread and discusses thread status,creation and control 

of thread method.discusses synchroni zation mechan{sm base on dava. 

Kevwords:Mu1tithreadj Java;Synchron{zat{on Mechanism 

0引言 用程序的执行效率 

对于当前的操作系统,大都采用多任务和多线程技术,使 2线程的生命周期与状态 

程序能够并发执行 而在许多编程语言中,要执行多线程的 由于线程与进程一样是一个动态的概念,所以线程也像 

程序,就不得不使用一个外部线程包  ̄Java本身有内置的 进程一样有一个从产生到消亡的生命周期。在其生命周期 

线程包,这使得Java编程人员可以很方便地开发出具有多线 中,程序可以对线程进行各种控制操作。 

程的功能,能同时处理多个任务的功能强大的应用程序。虽 对于每个Java程序都有一个缺省的主线程,如应用程序 

然执行线程给人一种几个事件同时发生的感觉,但这只是…・ 的主线程是main()方法执行的线索,则Applet的主线程指 

种错觉 因为我们的计算机在任何给定的时刻只能执行那些 挥浏览器加载并执行Java小程序。要想实现多线程,必须在 

线程中的一个。为了建立这些线程正在同步执行的感觉, 主线程中创建新的线程对象。新建的线程在它的~个完整的 

Java快速地把控制从一个线程切换到另一个线程。 生命周期中通常要经历如_卜的五种状态: 

1进程和线程 (1)创建状态 

进程是一个执行的程序,是资源分配和作业调度的基本 使用new运算符创建一个线程后,该线程仅仅是一个空 

单位。作为资源分配的基本单位,不同CPU的进程拥有各自 X寸象,系统没有分配资源,称该线程处于创建状态(new 

独立的地址空间、代码段、数据段和栈,并且拥有各自独立thread)。 

的资源、文件描述符表、进程表项、地址映射表、当前目录 (2)就绪状态 

等。由此可见,进程的上下文是相当庞大的,而以这种附带 使用start 0方法启动一个线程后,系统为该线程分配 

着庞大上下文的进程作为调度的基本CPU单位是不合适的, 了除ceu#b的所需资源,使该线程处于就绪状 ̄,(Runnable)。 

因为它加重了系统管理进程的负担。由于进程集资源分配基 (3)执行状态 

本单位、调度基本单位于一身,所以它能较好地解决了多任 Java运行系统通过调度选中一个Runnable的线程,使 

务的问题,但它使系统开销庞大。 其占有CPU并转为执行(Running) 此时,系统真正执行线 

为了减少的系统负担,便产生了线程的概念。线程是系 程的run 0方法 

统调度和运行的最小单位,每个进程都可以创建单个或多个 (4)阻塞状态 

线程,线程是进程中的一个执行单元,是一个独立的控制流, 一个正在运行 ̄JNNN某种原因不能继续运行时,进入 

在运行中有自己的资源。把进程划分成多个线程,目的是为 阻塞状态(Blocked)。 

了实现并行程序设计,在同一地址空间中执行多控制流,减 (5)死亡状态 

少并行执行时进程间切换的系统开销,因此可以大大提高应 线程结束后是死亡状态(Dead)。 

1 1 5 

维普资讯

3 Java实现线程的方法 

4.2线程的调度模型 

3.1利用Runnable接口 

同一时刻如果有多个线程处于可运行状态,则他们需要 

排队等待CPU资源。此时每个线程自动获得一个线程的优先 

级(pri ority),优先级的高低反映线程的重要或紧急程度。 

可运行状态的线程按优先级排队,线程调度依据优先级基础 

Runnable接口只有一个7 ̄Nrun(),所有实现Runnable 

接口的用户类都必须实现这个run方法,为它提供具体操作 

的方法体,当用Thread类的构造方法Thread(Runnab1e 

target)创建线程对象时,构造方法中的参数必须是一个具 

体的对象,该对象称为线程的目标对象,创建目标对象的类必 

须要实现Runnable接口。当线程被调度并转入运行状态时, 

它所执行的就是run()方法中规定的操作,所以,一个宴现 

了Runnable接口的类实际上定义了一个主线程之外的新线程 

的操作。 

public class MyThread implements Runnable( 

Mythread thread1.thread2; 

//实现Runnable接口的run方法,在该线程被启动时自动执 

行 

} 

public static void main(String args[]){ 

threadl=new ̄yThread 0 j 

thread2=new MyThread 0; 

thread1.start0; //启动线程1 

thread2.start0; //启动线程2 

}) 

3.2继承Thread类 

继承Thread类,覆盖方法run(),我们在创建的 

Thread类的子类中重写run 0,加入线程所要执行的代码 

即可。Thread类的主要方法有: 

①start()方法,线程调用该方法将启动线程,使之从新 

建状态转入就绪状态并进入就绪队列排队。 

⑦run0方法与Runnable接口中的run0方法的功能和 

作用相同,都用来定义线程对象被调度之后所执行的操作,都 

是系统自动调用而用户程序不得引用的方法。 

③Sleep(int millsecond)方法来使自己放弃处理器资 

源,休眠一段时间,休眠时问的长短有sleep方法的参数决定, 

millsecond是毫秒为单位的休眠时间。 

这种方法实现简单,但它有一个很大的缺点,当我们的 

类已经从一个类继承(如小程序必须继承自Applet类),则 

无法再继承Thread类。 

4线程调度与优先级 

4.1线程的优先级 

Java的优先级用1 1o表示,1表示优先级最高,默认值 

是5。每个优先级对应一个Thread类的公用静态常量。 

上的“先到先服务”原则。 

线程调度管理器负责线程排队和CPU在线程间的分配, 

并由线程调度算法进行调度。当线程调度管理器选种某个线 

程时,该线程获得CPU资源而进入运行状态。Java线程调度 

采用先占式调度,即如果在当前线程执行过程中一个更高优 

先级的线程进入可运行状态,则这个线程立即被调度执行。 

先占式调度分为:独占式和分时方式。 

5 Java线程的同步 

线程同步的基本思想是避免多个线程对同一资源的访 

问,这个资源既可以是一个对象,也可以是一个方法或一段 

代码。对于表明了被同步的资源,Java中引入了一个类似于 

进程信号量的机制一管程(monitor)。每个被同步资源都对 

应一个管程,首先占用这个资源的线程只能排队等候管程, 

从而实现了线程对资源的独占。 

Java ̄1人关键字synchronized来标志被同步的资源,形 

式为:synchronized(对象名)同步方法。当某个线程进入 

临界区后,系统将给临界区加锁,其它线程则无法再进入临界 

区,只能等到该线程退出临界区,即开锁后方可进入,从而实 

现线程的同步。Java在Java.1ang.object类中提供了三个同 

步方法wait,notify和notifyAll来实现线程间的同步与 

通信。wait 0使当前线程阻塞并进入相应的等待队列,直到 

其它线程用notify()或notifyall()将其唤醒;notify 0唤醒 

因等待当前对象的监视器而阻塞的一个线程;notifyAll 0方 

法唤醒因等待当前对象的监视器而阻塞的所有线程。 

6结束语 

多线程在计算机应用中具有非常积极的意义和广阔的应 

用前景。利用Java的多线程特性可方便地编写高效率、安全 

的多线程应用程序。当然JAVA在实现多线程时有如下缺点: 

等待临界资源时,会使速度下降;对线程的管理也会增 ̄ucPu 

的额外负担;由于缺乏成效,所以多线程既复杂又会降低效 

率。 

参考文献 

…印昱.Java与面向对象程序设计教程[M].北京高等 

教育出版社,1999. 

[2]耿祥义,等.Java2实用教程[M].北京:清华大学出 

版社,2004. 

[3]汤子赢,计算机操作系统[M].西安:西安电子科技 

出版社,2001. 


本文标签: 线程 执行 调度 状态 方法