- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第的10章 多线程
* 第10章 多线程 10.1 线程的创建与启动 10.4 后台线程 10.3 线程调度 10.2 线程的状态转换 10.5 线程互斥 10.6 线程同步 10.1 线程的创建与启动 10.1.1 继承java.lang.Thread类 Thread类代表线程类,它的常用方法如下: ? static Thread currentThread():返回当前正在运行的线程对象的引用。 ? static void yield():暂停当前正在运行的线程对象,并运行其他线程。 ? static void sleep(long millis) throws InterruptedException:在指定的毫秒数内让当前正在运行的线程休眠(暂停执行),此操作受系统计时器和调度程序精度和准确性的影响。 ? void start():启动线程,JVM调用该线程的run()方法使其与其他的线程并发运行。 ? void run():如果线程是通过实现Runnable接口的对象构造,则调用该Runnable对象的run()方法;否则该方法不执行任何操作并返回。Thread的子类应重写该方法。 ? void interrupt():设置线程的中断标记位,请求线程停止运行。 ? final void setPriority(int newPriority):更改线程的优先级。 ? final int getPriority():返回线程的优先级。 ? final void setName(String name):设置线程的名称为name。 ? final String getName():返回线程的名称。 ? final void join()throws InterruptedException:等待该线程终止。 ? final void setDaemon(boolean on):将该线程标记为守护线程或用户线程。当正在运行的线程都是守护线程时,JVM退出。该方法必须在启动线程前调用。 ? long getId():返回线程ID(即线程标识符),它是一个正的长整数,在创建线程时生成。 10.1.1 继承java.lang.Thread类 【例10.1】继承Thread类实现多线程。 程序的一种可能运行结果: main:0 Thread-0:0 main:1 Thread-0:1 main:2 Thread-0:2 main:3 Thread-0:3 main:4 Thread-0:4 Thread-0:5 main:5 main:6 Thread-0:6 main:7 Thread-0:7 main:8 Thread-0:8 main:9 Thread-0:9 10.1.2 实现Runnable接口 【例10.2】实现Runnable接口的方式实现多线程。 程序的一种可能运行结果: Thread-0:0 main:0 main:1 Thread-0:1 main:2 Thread-0:2 main:3 Thread-0:3 main:4 Thread-0:4 Thread-0:5 main:5 main:6 Thread-0:6 main:7 Thread-0:7 main:8 Thread-0:8 main:9 Thread-0:9 10.2 线程的状态转换 1.新建状态(New) 用new操作符创建一个线程对象(如new Thread(t))时,线程还没开始运行,此时它处在新建状态,程序尚未执行线程中的代码,在线程可以运行之前可能还有一些工作要做。 2.就绪状态(Runnable) 当一个线程对象被创建后,其他线程调用了它的start()方法,该线程就进入就绪状态。这种状态下,只要调度器把时间片分配给它,线程就能运行,JVM为它创建方法调用栈和程序计数器。处于这个状态的线程位于运行池中,等待获得CPU的使用权。Java不区分就绪态和运行态。 10.2 线程的状态转换 3.阻塞状态(Blocked) 一个线程进入阻塞状态可能有如下原因: (1)通过调用sleep(milliseconds)使线程进入休眠状态,线程在指定的时间内不会运行。 (2)通过调用wait()方法使线程挂起,直到它得到notify()或notifyAll()消息才会重新进入就绪状态。 (3)线程在等待某个输入/输出完成。 (4)线程试图在某个对象上调用同步控制方法,但对象锁不可用,因为另一个对象已经获取了这个锁。 4.死亡状态(Dead) 当线程退出run()方法时就进入死亡状态,它的生命周期结束。一个线程可能是正常执行完run()方法退出,但也有可能是遇到异常而退出run()方法。 10.2 线程的状态转换 【例10.3】调用sleep()方
文档评论(0)