- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java教材课件09_2
9.1 多线程的概念 进程和线程 进程就是在计算机中正在执行的程序(即处于活动状态的程序),每一个进程都有自己独立的一块内存空间和一组系统资源,每个程序也是为了各自的任务而运行,互不干扰。 在进程的基础上,线程概念后来又被提出,它使得在一个进程中同时处理多个任务成为可能。 线程可以被看作是进程的进一步细分,也就是把进程完成的任务划分成一个个更小的子任务,每一个子任务就是一个线程,然后用细分的这些线程分别去执行。 线程是基于进程的一个基本运行单位,线程同样包括一个内存入口点地址、一个出口点地址以及能够顺序执行的代码序列。 线程与进程的重要区别在于线程不能够单独执行,它必须运行在处于活动状态的进程中,线程本身的数据通常只有微处理器的寄存器数据以及一个供程序执行时使用的堆栈,因此可以定义线程是程序内部的顺序代码流,也就是说线程是在进程作用域内活动的一系列指令流。 多线程简介 多线程允许在程序中“并行”执行多个指令流,每个指令流被称作一个线程,彼此间的执行互相独立。 在单CPU计算机系统中,系统把CPU的时间片按照调度算法分配给各个线程,因此各线程实际上是分时执行的。真正的“同时”是不可能的,但是由于CPU的速度非常快,用户感觉不到区别。 而在多CPU的计算机系统中,同一个程序的不同线程可以分配到不同的CPU上去执行。多个线程的执行是并发的,也就是在逻辑上“同时”,而不是物理上的“同时”。 Java语言提供了多任务并发执行的能力。 只要合理安排各个线程的运行,就可以极大地提高程序的运行效率。 Java内置了Thread类来实现多线程。 一个线程是由三部分组成的: 虚拟处理机(CPU),封装在java.lang.Thread类中,它控制着整个线程的运行,提供对多线程的支持; 执行的程序代码,传递给Thread类,由Thread类控制顺序执行; 程序所处理的数据,传递给Thread类,是在代码执 行过程中所要处理的数据。 Java的线程是通过java.lang包中定义的类Thread来实现的。当生成一个Thread类的对象之后,就产生了一个线程,通过该对象实例,可以启动线程、终止线程、或者暂时挂起线程等。 Java在语言级提供了对线程的支持,Java语言中使用多线程要远比在其它语言中使用线程简单得多。 9.2.1 线程类 Thread类是负责向其它类提供线程支持的最主要的类,Thread类在包java.lang中定义,它的构造方法为: public Thread(ThreadGroup group,Runnable target,String name); group指明该线程所属的线程组; target是指实际执行线程体的目标对象,它必须实现接口Runnable; name为线程名,Java中的每个线程都有自己的名称, 如果name为null时,则Java将自动为其分配一个唯一的名称。 在线程构造方法中,每个参数都可以为空, 9.2.2 线程的创建 在Java中,每个程序至少自动拥有一个线程,称为主线程,当程序加载到内存时,启动主线程,如果需要使用其它线程,则可以采用以下两种方式创建新的线程: 扩展java.lang.Thread类,用它覆盖Thread类的run( )方法; 编写一个实现java.lang.Runnable接口的类,然后在Thread构造函数中使用它,创建新线程。 注意:如果一个类要继承其它的类,最好选用第二种方法,这样会有更大的灵活性。 1.扩展Thread类 Thread类位于java.lang包中,由于java.lang包自动被导入每个Java程序中,所以可以直接使用类Thread而无需在Java程序开始处编写import语句,也这说明了Java对线程支持的彻底性。通过这个类中的方法,可以启动、终止、中断线程以及查询、设置线程的当前状态。 使用扩展Thread类的方式创建并执行一个线程,需要执行下面4个步骤: 扩展java.lang.Thread的类; 用希望的执行代码来实现run()方法; 通过new关键字实例化该类的一个新对象(即一个线程) 通过调用start()方法启动线程。 由于main()线程(其实main()本身就可以看作是一个线程)和tt线程的调度情况是由操作系统动态决定的,因此编译并运行这个程序,每次运行的结果不一定相同。 需要注意的是,在Java中,Thread对象通过start()方法启动线程而不能直接调用run()方法,在调用start()方法后首先进行一些初始化,然后再调用run()方法启动线程。 试试直接调用线程的run方法 2.实现Runnable接口 第1步:定义一个Runnable接口的实现类,如MyThread,其内必须实现Runnable接口所声明的r
文档评论(0)