本文详细介绍Java线程的讨论与应用
一、为什么要研究和使用线程
一般来说,计算机正在执行的程序称作进程(process),进程有不同的地址空间并且是在同一系统上运行的不同程序,如WORD和Excel,进程间的通讯是很费时而且有限的。上下文切换、改变运行的进程也是非常复杂的。进程间通讯复杂,可能需要管道、消息队列、共享内存(sharedmemory)或信号处理来保证进程间的通讯。尽管许多程序都在运行,但一次只能与一个程序打交道。
线程(thread)是指进程中单一顺序的控制流。又称为轻量级进程。线程则共享相同的地址空间并共同构成一个大的进程。线程间的通讯是非常简单而有效的,上下文切换非常快并且是整个大程序的一部分切换。线程仅是过程调用,它们彼此独立执行,线程使得在一个应用程序中,程序的编写更加自由和丰富。线程的兴趣在于,一个程序中同时使用多个线程来完成不同的任务。因此如果很好地利用线程,可以大大简化应用程序设计。多线程可以增进程序的交互性,提供更好的能力和功能、更好的GUI和更好的服务器功能。给二个例子说明如下:
例一:利用多线程并行机制可以很好地解决交互式网络程序中的许多问题,如:大量的网络文件资源的读写、用户输入响应、动画显示等问题不需要CPU的多少时间;而耗时的复杂计算通常并不需要立即响应,所以无需将CPU全给它。例如,从一个慢速的网络上读取一数据流也许要1分钟时间,但需要CPU参与传输数据的时间则非常短;响应用户的输入如击键,就算最快的输入员,1秒钟击键10次,也不需要CPU的多少时间。动画程序比较耗时,一幅画在1秒内要重绘5-10次,但CPU在大部分时间仍处于空闲状态。在传统的单线程环境下的问题是用户必须等待每个任务完成后才能进行下一个任务。即使CPU大部分时间空闲,也只能按步就班地工作。多线程可以很好地解决这些问题避免引起用户的等待。如:耗时的复杂计算应用就可划分成两个控制线程:一个处理GUI的用户事件,另一个进行后台计算。
责编:豆豆技术应用