基于新信息技术的Java程序设计基础 课件 第7章 多线程程序设计.pptx

基于新信息技术的Java程序设计基础 课件 第7章 多线程程序设计.pptx

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

7.1线程的概念

7.2多线程程序设计

7.3多线程的状态处理

7.4线程的同步与共享;7.1线?程?的?概?念;线程,有时被称为轻量级进程(LightweightProcess,LWP),是程序执行流的最小单元。一个标准的线程由线程ID、当前指令指针(PC)、寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有运行中必需的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。每一个程序至少有一个线程,若程序只有一个线程,那就是程序本身。

7.1.1线程、进程和多任务

现在的操作系统都是多任务操作系统,每个运行的任务就是操作系统所做的一件事情,比如在听歌的同时还在用MSN和好友聊天。听歌和聊天就是两个任务,这个两个任务是“同时”进行的。一个任务一般对应一个进程,也可能包含好几个进程。比如运行的MSN就对应一个MSN的进程,如果用户使用的是Windows系统,就可以在任务管理器中看到操作系统正在运行的进程信息。

一般来说,当运行一个应用程序的时候,就启动了一个进程,当然有些会启动多个进程。启动进程的时候,操作系统会为进程分配资源,其中最主要的资源是内存空间,因为程序是在内存中运行的。在进程中,有些程序流程块是可以乱序执行的,并且这个流程块可以同时被多次执行。实际上,这样的流程块就是线程体。线程是进程中乱序执行的代码流程。当多个线程同时运行的时候,这样的执行模式就成为并发执行。

;线程与进程的比较如下:

(1)进程:每个进程都有独立的代码和数据空间(进程上下文),进程切换的开销大。

(2)线程:即轻量的进程,同一类线程共享代码和数据空间。每个线程有独立的运行栈和程序计数器(PC),线程切换的开销小。

(3)多进程:在操作系统中能同时运行多个任务程序。

(4)多线程:在同一应用程序中有多个顺序流同时执行。

7.1.2Java中的多线程

多线程机制是Java语言的又一重要特征,使用多线程技术可以使系统同时运行多个执行体,这样可以加快程序的响应时间,提高计算机资源的利用率。使用多线程技术可以提高整个应用系统的性能。

在Java中,创建线程有两种方法:一种是通过创建Thread类的子类来实现;另一种是通过实现Runnable接口的类来实现。;7.2多线程程序设计;7.2.1从Thread类继承

从Thread类继承是创建一个线程较为简便的方法。在继承这个类之后,我们需要覆盖它的run方法,每一个线程都会分别执行一次run方法。

下面程序是一个多线程的实例。在这个程序中有两个线程,每个线程都会执行一次run方法,但是两个线程执行的顺序并不固定,因此,输出谁先谁后都是随机的。程序后面是某一次运行的输出(注意每次运行都会不同)。

注意,创建线程后,start方法用于启动线程。

在一个方法中调用Thread.currentThread().getName()方法,可以获取当前线程的名字。在mian方法中调用该方法,获取的是主线程的名字。

多线程程序是乱序执行。因此,只有乱序执行的代码才有必要设计为多线程。

Thread.sleep()方法的调用目的是不让当前线程独自占有该进程所获取的CPU资源,以留出一定时间给其他线程执行的机会。

实际上所有的多线程代码执行顺序都是不确定的,每次执行的结果都是随机的。;7.2.2实现Runnable接口

【示例7.2】通过接口构造线程体。

publicclassClockextendsjava.applet.AppletimplementsRunnable

{ //实现接口

ThreadclockThread;

publicvoidstart(){

//该方法是Applet的方法不是线程的方法

if(clockThread==null)

{

clockThread=newThread(this,Clock);

/*线程体是Clock对象本身线程名字为Clock*/

clockThread.start(); //启动线程

}

}

;publicvoidrun()

{ //run()方法中是线程执行的内容

while(clockThread!=nul

文档评论(0)

xiaobao + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档