ITjob就业培训java教材11

ITjob就业培训java教材11

ID:42626859

大小:517.02 KB

页数:17页

时间:2019-09-19

ITjob就业培训java教材11_第1页
ITjob就业培训java教材11_第2页
ITjob就业培训java教材11_第3页
ITjob就业培训java教材11_第4页
ITjob就业培训java教材11_第5页
资源描述:

《ITjob就业培训java教材11》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、第十一章:线程ITjob就业培训第十一章线程学习目标n线程的概念n线程状态和调度n线程中断/恢复的几种方式n创建线程的两种方式n线程的控制n线程的同步n实例分析175第十一章:线程ITjob就业培训1.线程的概念一个关于计算机的简化的视图是:它有一个执行计算的处理机、包含处理机所执行的程序的ROM(只读存储器,在JAVA中也叫堆栈)、包含程序所要操作的数据的RAM(随机存储器,在JAVA中也叫堆)。在这个简化视图中,只能执行一个作业。一个关于最现代计算机比较完整的视图允许计算机在同时执行一个以上的

2、作业。你不需关心这一点是如何实现的,只需从编程的角度考虑就可以了。如果你要执行一个以上的作业,这类似有一台以上的计算机。在这个模型中,线程(或执行上下文),被认为是带有自己的程序代码和数据的虚拟处理机的封装。java.lang.Thread类允许用户创建并控制他们的线程。在单CPU的情况下,一个时刻只能运行一个进程,那么进程在运行时,也只能运行一个线程来代表该进程的执行。进程是正在执行的程序。一个或更多的线程构成了一个进程(操作系统是以进程为单位的,而进程是以线程为单位的,进程中必须有一个主线程)

3、。一个线程(执行上下文)由三个主要部分组成:Ø一个虚拟CPUØCPU执行的代码Ø代码操作的数据如图所示代码可以由多个线程共享,它不依赖数据。如果两个线程执行同一个类的实例的代码时,则它们可以共享相同的代码。类似地,数据可以由多个线程共享,而不依赖代码。如果两个线程共享对一个公共对象的访问,则它们可以共享相同的数据。在Java编程中,虚拟处理机封装在Thread类的一个实例里。构造线程时,定义其上下文的代码和数据是由传递给它的构造函数的对象指定的。Java线程分守护线程和用户线程,由创建时设置。18

4、9第十一章:线程ITjob就业培训线程状态和调度在Java中,线程的调度是基于时间片基础上的优先级优先原则删改“线程是抢占式的,而不是分时的(一个常见的错误是认为"抢占式"只不过是"分时"的一种新奇的称呼而已)”,这句话写的不精确。抢占式调度模型(优先级优先)是指可能有多个线程是可运行的,但只有一个线程在实际运行。这个线程会一直运行,直至它不再是可运行的(运行时间到,时间片原则,或者,另一个具有更高优先级的线程抢占,优先级优先原则)。这句话被重组了一下。对于后面一种情形,低优先级线程被高优先级线程

5、抢占了运行的机会。线程删除了“一个线程可能因为各种原因而不再是可运行的。”这段话,放在下面说明的代码可能执行了一个Thread.sleep()调用,要求这个线程暂停一段固定的时间。这个线程可能在等待访问某个资源,而且在这个资源可访问之前,这个线程无法继续运行。所有可运行线程根据优先级保存在池中。当一个被阻塞的线程变成可运行时,它会被放回相应的可运行池。优先级最高的非空池中的线程会得到处理机时间(被运行)。一个Thread对象在它的生命周期中会处于各种不同的状态。下图形象地说明了这点:我认为此图讲解

6、的比较合理线程进入"可运行"状态,并不意味着它立即开始运行。在一个只有一个CPU的机器上,在一个时刻只能进行一个动作。(下节将描述:如果有一个以上可运行线程时,系统如何分配CPU。)因为Java线程是抢占式的,所以你必须确保你的代码中的线程会不时地给其它线程运行的机会。这可以通过在各种时间间隔中发出sleep()调用来做到。classThreadAimplementsRunnable{publicvoidrun(){while(true){//线程的执行代码部分try{//给其他的线程提供机会运行

7、Thread.sleep(7);}catch(Exceptione){}}}189第十一章:线程ITjob就业培训}try和catch块的使用。Thread.sleep()和其它使线程暂停一段时间的方法是可中断的。线程可以调用另外一个线程的interrupt()方法,这将向暂停的线程发出一个InterruptedException。Thread类的sleep()方法对当前线程操作,因此被称作Thread.sleep(x),它是一个静态方法。sleep()的参数指定以毫秒为单位的线程最小休眠时间。除

8、非线程因为中断而提早恢复执行,否则它不会在这段时间之前恢复执行。使用该方法只是使当前线程中断多少毫秒,并不是创建多线程。例如:classTestTS{//Threadsleeppublicstaticvoidmain(String[]args){try{Thread.sleep(5000);//中断当前线程(main)5秒,并没有创建新的线程。}catch(Exceptione){e.printStackTrace();}System.out.println("HelloWorld

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。