- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
JAVA多线程详解1
Java 多线程编程
Java 语言的一个重要特点是内在支持多线程的程序设计。多线
程是指在单个的程序内可以同时运行多个不同的线程完成不同的
任务。多线程的程序设计具有广泛的应用。本章主要讲授线程的概
念、如何创建多线程的程序、线程的生存周期与状态的改变、线程
的同步与互斥等内容。
新建-就绪- (阻塞)-运行--死亡
其中当用new 创建完一个线程对象后,该线程处于新建状态
当线程对象调用了start()后,该线程处于就绪状态
如果处于就绪状态的线程获得CPU 时间片,开始执行run方法的线程执行
体,该线程处于运行状态
如果线程调用了sleep()或者调用了一个阻塞式IO方法等,该线程处于阻塞
状态
如果线程的run()执行完成或者抛出一个未捕获的异常等原因,该线程
处于死亡状态
9.1 线程与线程类
9.1.1 线程的概念
线程的概念来源于计算机的操作系统的进程的概念。进程是一个程序关于某个数据集的
一次运行。也就是说,进程是运行中的程序,是程序的一次运行活动。
线程和进程的相似之处在于,线程和运行的程序都是单个顺序控制流。有些教材将线程
称为轻量级进程(lightweightprocess)。线程被看作是轻量级进程是因为它运行在一个程序的
上下文内,并利用分配给程序的资源和环境。
作为单个顺序控制流,线程必须在运行的程序中得到自己运行的资源,如必须有自己的
Java 多线程编程 217
执行栈和程序计数器。线程内运行的代码只能在该上下文内。因此还有些教程将执行上下文
(execution context)作为线程的同义词。
所有的程序员都熟悉顺序程序的编写,如我们编写的名称排序和求素数的程序就是顺序
程序。顺序程序都有开始、执行序列和结束,在程序执行的任何时刻,只有一个执行点。线
程 (thread)则是进程中的一个单个的顺序控制流。单线程的概念很简单,如图9.1所示。
多线程 (multi-thread)是指在单个的程序内可以同时运行多个不同的线程完成不同的任
务,图9.2 说明了一个程序中同时有两个线程运行。
一个线程 两个线程
图9.1 单线程程序示意图 图9.2 多线程程序示意图
有些程序中需要多个控制流并行执行。例如,
for(int i 0;i 100;i++)
System.out.println(RunnerA + i);
for(intj 0;j 100;j++)
System.out.println(Runner B +j);
上面的代码段中,在只支持单线程的语言中,前一个循环不执行完不可能执行第二个循
环。要使两个循环同时执行,需要编写多线程的程序。
很多应用程序是用多线程实现的,如Hot JavaWeb 浏览器就是多线程应用的例子。在
Hot Java 浏览器中,你可以一边滚动屏幕,一边下载Applet 或图像,可以同时播放动画和
声音等。
9.1.2 Thread 类和Runnable接口
多线程是一个程序中可以有多段代码同时运行,那么这些代码写在哪里,如何创建线程
对象呢?
首先,我们来看Java 语言实现多线程编程的类和接口。在java.lang 包中定义了Runnable
接口和Thread类。
Runnable接口中只定义了一个方法,它的格式为:
public abstractvoidrun()
这个方法要由实现了Runnable接口的类实现。Runnable 对象称为可运行对象,一个线
程的运行就是执行该对象的run()方法。
Thread类实现了Runnable接口,因此Thread 对象也是可运行对象。同时Thread 类也是
线程类,该类的构造方法如下:
publicThread()
publicThread(Runnabletarget)
publicThread(Stringname)
publi
文档评论(0)