admin 管理员组文章数量: 1087139
2024年3月19日发(作者:no stacking)
维普资讯
i
浅
议
c-
雩
J a v a的多线程卿技术
∞
的
多
Tentative DiSCUSSion on the Java MultiThread Implementation Technology 线
程
实
程小扬朱隆尹 现
i
}
(赣南师范学院数学与计算机系,赣州
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.
版权声明:本文标题:浅议Java的多线程实现技术 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/b/1710814575a574471.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论