暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
JAVA第14章 多线程.pdf
296
24页
0次
2021-02-22
50墨值下载
14
多线程
利用对象,可将一个程序分割成相互独立的区域。我们通常也需要将一个程
序转换成多个独立运行的子任务。
象这样的每个子任务都叫作一个“线程”
Thread
。编写程序时,可将每个
线程都想象成独立运行,而且都有自己的专
CPU
。一些基础机制实际会为我
们自动分割
CPU
的时间。我们通常不必关心这些细节问题,所以多线程的代码
编写是相当简便的。
这时理解一些定义对以后的学习狠有帮助。“进程”是指一种“自包容”
运行程序,有自己的地址空间。“多任务”操作系统能同时运行多个进程(程序)
——但实际是由于
CPU
分时机制的作用,使每个进程都能循环获得自己的
CPU
时间片。但由于轮换速度非常快,使得所有程序好象是在“同时”运行一样。“线
程”是进程内部单一的一个顺序控制流。因此,一个进程可能容纳了多个同时执
行的线程。
多线程的应用范围很广。但在一般情况下,程序的一些部分同特定的事件或
资源联系在一起,同时又不想为它而暂停程序其他部分的执行。这样一来,就可
考虑创建一个线程,令其与那个事件或资源关联到一起,并让它独立于主程序运
行。一个很好的例子便是“
Quit”
或“退出”按钮——我们并不希望在程序的每
一部分代码中都轮询这个按钮,同时又希望该按钮能及时地作出响应(使程序看
起来似乎经常都在轮询它)事实上,多线程最主要的一个用途就是构建一个“反
应灵敏”的用户界面。
14.1
反应灵敏的用户界面
作为我们的起点,请思考一个需要执行某
CPU
密集型计算的程序。由于
CPU“
全心全意”为那些计算服务,所以对用户的输入十分迟钝,几乎没有什么
反应。在这里,我们用一个合成
applet/application
(程序片/应用程序)来
单显示出一个计数器的结果:
752-753
页程序
在这个程序中,
AWT
和程序片代码都应是大家熟悉的,
13
章对此已有很
详细的交待。
go()
方法正是程序全心全意服务的对待:当前
count
(计数)
值置入
TextField
(文本字段)
t
,然后使
count
增值。
go()
内的部分限循环是
sleep()
sleep()
必须同一
Thread
(线程)
关联似乎序都线它关
Java
本身就是建立在线程基础上的,肯定有一些线程会伴随我们写的应用一起运行)
所以无论我们是否明确使用了线程,都可利
Thread.currentThread()
产生由程序
使用的当前线程,然后为那个线程调用
sleep()
。注意,
Thread.currentThread()
Thread
类的一个静态方法。
注意
sleep()
可能“掷”出一个
InterruptException
(中断违例)——尽管产生
这样的违例被认为是中止线程的一种“恶意”手段,而且应该尽可能地杜绝这一
做法。再次提醒大家,违例是为异常情况而产生的,而不是为了正常的控制流。
在这里包含了对一个“睡眠”线程的中断,以支持未来的一种语言特性。
一旦按下
start
按钮,就会调用
go()
研究一下
go()
你可能会很自然地(就
象我一样)认为它该支持多线程,因为它会进入“睡眠”状态。也就是说,尽管
方法本身“睡着”了,
CPU
仍然应该忙于监视其他按钮“按下事件。但有
个问题,那就是
go()
是永远不会返回的,因为它被设计成一个无限循环。这意味
actionPerformed()
便
actionPerformed()
中,所以程序不能再对其他任何事件进行控制(如果想出来
必须以某种方式“杀死”进程——最简便的方式就是在控制台窗口按
Ctrl
C
键)
这里最基本的问题是
go()
需要继续执行自己的操作,而与此同时,它也需要
返回,以便
actionPerformed()
能够完成,而且用户界面也能继续响应用户的操作。
但对象
go()
这样的传统方法来说,它却不能在继续的同时将控制权返回给程序的
其他部分。这听起来似乎是一件不可能做到的事情,就象
CPU
必须同时位于两
个地方一样,但线程可以解决一切“线程模型”以及
Java
中的编程支持)是
一种程序编写规范,可在单独一个程序里实现几个操作的同时进行。根据这一机
制,
CPU
可为每个线程都分配自己的一部分时间。每个线程都“感觉”自己好
象拥有整个
CPU
,但
CPU
的计算时间实际却是在所有线程间分摊的。
线程机制多少降低了一些计算效率,但无论程序的设计,资源的均衡,还是
用户操作的方便性,都从中获得了巨大的利益。综合考虑,这一机制是非常有价
值的。当然,如果本来就安装了多块
CPU
,那么操作系统能够自行决定为不同
CPU
分配哪些线程,程序的总体运行速度也会变得更快(所有这些都要求操
作系统以及应用程序的支持)。多线程和多任务是充分发挥多处理机系统能力的
一种最有效的方式。
14.1.1
从线程继承
为创建一个线程,最简单的方法就是从
Thread
类继承。这个类包含了创建和
运行线程所需的一切东西。
Thread
最重要的方法是
run()
。但为了使用
run()
,必
of 24
50墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜