- 1、本文档共28页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
程序、进程与线程 程序是一段静态的代码,它表现为磁盘上的一个文件。 进程是程序的一次动态执行过程,进程包括代码以及系统为了执行它而分配给它的一系列资源。 线程是比进程更小的执行单位。一个进程在其执行过程中,可以产生多个线程,每个线程也有它自身的产生、存在和消亡的过程,也是一个动态的概念。 多线程 以往我们写的程序都是单线程的,对于多线程这个概念,你目前了解了多少? Java线程 Java Thread Java中,每个线程都是java.lang.Thread的对象,由Thread类来完成线程调度的细节以及控制线程的各个方法。 创建Java Thread 创建一个具有线程功能的线程类可以通过以下两种方式: 继承 java.lang.Thread 实现 java.lang.Runnable 通常,第二种方式要好,因为你还可以继承其它的父类。 创建Java Thread 将希望被线程执行的代码写到新类的run()方法里。 Thread类里有run()方法,继承这个类需要覆盖这个方法,希望被线程执行的代码要写到这里 Runnable接口也有这个方法,实现这个接口需要实现这个抽象方法,而这个方法最终会被Thread类在某个时刻调用。 创建Java Thread Thread类的构造函数可以接受以下以下参数的多种组合 A Runnable object 它的run方法会被Thread类执行 A ThreadGroup object决定将要创建的线程对象属于哪个线程组 A name for the thread(a String)线程对象的名字 启动和终止Thread start() 通过调用Thread类的start方法来启动一个线程。 start方法内部会调用run方法 (或是thread类的run方法,或是Runnable接口中的方法)。 线程会在run方法返回或是发生异常的情况下终止。 线程的常用方法 1.start() 线程从新建状态进入就绪队列排队,一旦轮到它来享用CPU资源时,就可以脱离创建它的主线程独立开始自己的生命周期了。 2.run() thread类的run()方法与Runnable接口中的run()方法的功能和作用相同,都用来定义线程对象被调度之后所执行的操作,都是系统自动调用而用户程序不得引用的方法。在线程没有结束run()方法之前,不赞成让线程再调用start()方法,否则将发生ILLegalThreadStateException异常。 3.sleep(int millsecond) 线程的调度执行是按照其优先级的高低顺序进行的,当高级线程未死亡时,低级线程没有机会获得处理器。有时,优先级高的线程需要暂时放弃处理器,让优先级低的线程有机会执行。为达到这个目的,优先级高的线程可以在它的run()方法中调用sleep方法来使自己放弃处理器资源,休眠一段时间。休眠时间的长短由sleep方法的参数决定。如果线程在休眠时被打断,JVM就抛出InterruptedException异常。因此,必须在try~catch语句块中调用sleep方法。 4.isAlive() 检查线程是否处于运行状态的方法。在线程的run方法结束之前调用isAlive()方法返回true,当线程进入死亡状态后(实体内存被释放),调用方法isAlive(),这时返回的值是false。 需要注意:一个已经运行的线程在没有进入死亡状态时,不要再给线程分配实体,由于线程只能引用最后分配的实体,先前的实体就会成为“垃圾”,并且不会被垃圾收集机收集掉。 5.currentThread() currentThread():Thread类中的类方法,该方法返回当前正在使用CPU资源的线程。 6.interrupt() intertupt方法经常用来“吵醒”休眠的线程。当一些线程调用sleep方法处于休眠状态时,一个使用 CPU资源的其它线程在执行过程中,可以让休眠的线程分别调用interrupt 方法“吵醒”自己,即导致休眠的线程发生InterruptedException异常,从而结束休眠,重新排队等待CPU资源。 Thread类 setName() 可以为线程起名字 getName() 返回线程的名字 线程的生命周期 线程在它的一个完整的生命周期中通常要经历4 种状态, new 此时的线对象仅仅是普通的对象 Runnable(可运行状态) 系统为线程分配了它运行所需要的资源,它或者在就绪队列里等待执行,或者正在执行。 中断。 有4种原因的中断: ⒈ JVM将CPU资源从当前线程切换给其他线程,使本线程让出CPU的使用权处于中断状态。 ⒉ 线程执行了Thread.sleep(int millsecond)方法,
文档评论(0)