[工学]第九章多线程.pptVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[工学]第九章多线程

第九章 多线程 主要内容 1、进程与线程 2、多线程编程基础 3、线程的生命周期 4、线程的优先级 5、线程的常用方法 6、多线程的编程方式 教材第8章,ThinkingInJava第13章 1、进程与线程 1.1 进程 1.2 多线程概念 1.3 进程和线程的区别 1.1 进程(Process)概念 一个独立程序的每一次运行称为一个进程,例如 用word编辑文稿时,在一个窗口输出数据,同时在另一个窗口下载音乐,这三个独立的程序在同时运行,称为三个进程。 一个应用程序的执行(如Java程序)也对应于一个进程。 操作系统周期性的将CPU切换到不同的任务,分时间片轮流运行每一个进程,而每一个进程都像是连续运行的。 每一个进程占有自己的内存空间。 1.2 线程(Thread)概念 一个进程中多段代码同时并发执行,称为多线程。 采用多线程,一个进程的若干任务就可以细分为多个部分由多线程来处理,这样可以增强整个程序的吞吐量, 加快反应时间: 如:一个线程等待来自GUI的输入,另一个线程处理接受的输入信息。 创建线程比创建进程开销要小得多,线程之间的协作和数据交换也比较容易,线程称为轻量级进程(light-weight process)。 Java在语言级提供多线程并发的概念 1.3 进程与线程的区别 多进程必须使用操作系统提供的复杂机制去共享内存;而多线程可以自动访问同一内存地址空间。 线程之间的上下文切换(context switch)也比进程之间的上下文切换快得多,上下文切换指系统从一个运行的线程或进程切换到另一个运行的线程或进程。 线程的优势: 多线程编程简单,效率高(能直接共享数据和资源,多进程不能) 适合于开发服务程序(如Web服务,聊天服务等) 适合于开发有多种交互接口的程序(如聊天程序的客户端,网络下载工具) 2、多线程编程基础 2.1 创建新线程的两种方式 在Java中,可以采用两种方法获得线程 一是扩展java.lang.Thread类;当生成一个Thread类的对象之后,就产生了一个线程,通过该对象,可以启动线程、终止线程、或者暂时挂起线程等。 二是编写一个类,使之实现java.lang.Runnable接口,然后在Thread类的构造函数中启动它。 线程所执行的代码(或者说线程所要完成的功能)是通过方法run( )(包含在一个特定的对象中)来完成的。 在一个线程被建立并初始化以后,Java的运行时系统就自动调用run( )方法,正是通过run( )方法才使得建立线程的目的得以实现。 通常,run( )方法是一个循环,使得线程一直运行下去直到不再需要,例如一个播放动画的线程要循环显示一系列图片。有时,run( )方法会执行一个时间较长的操作,例如下载并播放一个JPEG格式的电影。 所以,要终止线程的运行,需要设定某个条件。 2.2 Thread 类 ——创建线程方法一 继承java.lang.Thread类,并覆盖其中的run()方法: public class Fruit{ public static void main(string[] args){ PlumThread P = new PlumThread(); P.start(); //启动线程 … } class PlumThread extends Thread{ public void run(){/*more code*开始执行新的线程/} } 说明: 从Thread类派生一个子类,并创建这个子类的对象,就可以产生一个新的线程。这个子类应该重写Thread类的run方法,在run方法中写入需要在新线程中执行的语句段。这个子类的对象需要调用start方法来启动,新线程将自动进入run方法。原线程将同时继续往下执行。 例8-1 结果说明 main()调用thread.start()方法启动新线程。 thread.run()方法在一边独自运行,不影响原来的main()的运行。 main()继续执行下面的代码,main()也可以看作是一个线程在运行,称为主线程(main thread)。 另例:drinks.java 如果没有优先级规定,线程的执行次序是随机的,一般主线程先执行,然后其他的线程再执行。 常用thread API,见教材P225或Java Doc thread class 2.3 Runnable接口 ——创建线程方法二 由于Java只支持单继承,采用前一种方法所定义的类就不能再继承其他类。 在这种情况下,便需要通过实现Runnable接口来生成多线程。 Runnable接口的定义如下: public interface Runnable { pu

文档评论(0)

ipbohn97 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档