java 线 程 讨 论 与 应 用 (转)

java 线 程 讨 论 与 应 用 (转)

ID:19712461

大小:37.50 KB

页数:10页

时间:2018-10-05

java 线 程  讨 论 与 应 用  (转)_第1页
java 线 程  讨 论 与 应 用  (转)_第2页
java 线 程  讨 论 与 应 用  (转)_第3页
java 线 程  讨 论 与 应 用  (转)_第4页
java 线 程  讨 论 与 应 用  (转)_第5页
资源描述:

《java 线 程 讨 论 与 应 用 (转)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Java线程的讨论与应用(转)日期:2001-3-711:20:12Java线程的讨论与应用龙士工一、为什么要研究和使用线程一般来说,计算机正在执行的程序称作进程(process),进程有不同的地址空间并且是在同一系统上运行的不同程序,如WORD和Excel,进程间的通讯是很费时而且有限的。上下文切换、改变运行的进程也是非常复杂的。进程间通讯复杂,可能需要管道、消息队列、共享内存(sharedmemory)或信号处理来保证进程间的通讯。尽管许多程序都在运行,但一次只能与一个程序打交道。线程(thread)是指进程中单一顺序的控制流

2、。又称为轻量级进程。线程则共享相同的地址空间并共同构成一个大的进程。线程间的通讯是非常简单而有效的,上下文切换非常快并且是整个大程序的一部分切换。线程仅是过程调用,它们彼此独立执行,线程使得在一个应用程序中,程序的编写更加自由和丰富。线程的兴趣在于,一个程序中同时使用多个线程来完成不同的任务。因此如果很好地利用线程,可以大大简化应用程序设计。多线程可以增进程序的交互性,提供更好的能力和功能、更好的GUI和更好的服务器功能。给二个例子说明如下:例一:利用多线程并行机制可以很好地解决交互式网络程序中的许多问题,如:大量的网络文件资源的

3、读写、用户输入响应、动画显示等问题不需要CPU的多少时间;而耗时的复杂计算通常并不需要立即响应,所以无需将CPU全给它。例如,从一个慢速的网络上读取一数据流也许要1分钟时间,但需要CPU参与传输数据的时间则非常短;响应用户的输入如击键,就算最快的输入员,1秒钟击键10次,也不需要CPU的多少时间。动画程序比较耗时,一幅画在1秒内要重绘5-10次,但CPU在大部分时间仍处于空闲状态。在传统的单线程环境下的问题是用户必须等待每个任务完成后才能进行下一个任务。即使CPU大部分时间空闲,也只能按步就班地工作。多线程可以很好地解决这些问题避

4、免引起用户的等待。如:耗时的复杂计算应用就可划分成两个控制线程:一个处理GUI的用户事件,另一个进行后台计算。例二:如并发服务器,它面向不定长时间内处理完的请求,对每个请求由服务器的线程处理。传统的并发服务器往往是基于多进程机制的,每个客户一个进程,需要操作系统的干预,进程的数目受操作系统的限制。本文利用Java的线程机制建立了基于多线程的并发服务器。生成和管理他们是相当简单的操作。线程被用来建立请求驱动的服务程序,每个客户一个线程,多个线程可以并发执行。特别地线程具有如下特性(1)线程共享父进程的所有程序和数据(2)有自身的运行

5、单元(3)有它自己的私有存储和执行环境(尤其是处理器寄存器),使得服务器进程不随客户数的增加而线性增加。可减少服务器进程的压力,降低开销,充分利用CPU的资源。以上并发服务器在某一瞬间由同一服务器进程所产生的多个并发线程对多个客户的并发请求采取分而治之的措施,从而解决了并发请求的问题。各线程即可以独立操作,又可以协同作业。降低了服务器的复杂度。Java是基于操作系统级的多线程环境之上设计的,Java的运行器依靠多线程来执行任务,并且所有类库在设计时都考虑到多线程机制。二、Java线程的结构Java支持一种“抢占式”(preempt

6、ive)调度方式。线程从产生到消失,可分5个状态:Newborn线程在己被创建但未执行这段时间内,处于一个特殊的"Newborn"状态,这时,线程对象己被分配内存空间,其私有数据己被初始化,但该线程还未被调度。此时线程对象可通过start()方法调度,或者利用stop()方法杀死.新创建的线程一旦被调度,就将切换到"Runnable"状态。RunnableRunnable意即线程的就绪状态,表示线程正等待处理器资源,随时可被调用执行。处于就绪状态的线程事实上己被调度,也就是说,它们己经被放到某一队列等待执行。处于就绪状态的线程何时

7、可真正执行,取决于线程优先级以及队列的当前状况。线程的优先级如果相同,将遵循"先来先服务"的调度原则。线程依据自身优先级进入等待队列的相应位置。某些系统线程具有最高优先级,这些最高优先级线程一旦进入就绪状态,将抢占当前正在执行的线程的处理器资源,当前线程只能重新在等待队列寻找自己的位置.这些具有最高优先级的线程执行完自己的任务之后,将睡眠一段时间,等待被某一事件唤醒.一旦被唤,这些线程就又开始抢占处理器资源。这些最高优先级线程通常用来执行一些关键性任务,如屏幕显示。低优先级线程需等待更长的时间才能有机会运行。由于系统本身无法中止高

8、优先级线程的执行,因此,如果你的程序中用到了优先级较高的线程对象,那么最好不时让这些线程放弃对处理器资源的控制权,以使其他线程能够有机运行。Running"Running"(运行)状态表明线程正在运行,该线己经拥有了对处理器的控制权,其代码目前正在

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。