- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
多线程 第13章 目标 掌握多线程的概念 掌握如何创建线程 了解死锁的概念 了解线程同步 了解使用 wait() 和 notify() 在线程之间进行通信 13.1.1 多线程的概念 程序:静态的计算机高级语言编写的代码。 进程:程序的一次执行。 线程:程序中的部分代码的一次执行过程。 多进程:操作系统中多个程序同时执行。 多线程:程序中多个片断同时执行。 13.1.2 Java中的多线程 Thread类是java.lang包中的一个专门用来创建线程和对线程进行操作的类。这些方法分为: 构造方法。 run()方法。 改变线程状态的方法。 操作线程属性的方法。 13.1.3 线程的状态和生命周期 新建 : 新建的线程处于新建状态 就绪 : 在创建线程后,它将处于就绪状态,等待 start() 方法被调用 执行: 线程在开始执行时进入运行状态 阻塞:在线程等待一个事件时(例如输入/输出操作),就称其处于阻塞状态。 死亡:在 run() 方法已完成执行或其 stop() 方法被调用之后,线程就处于死亡状态。 13.1.4 线程的调度和优先级 Java 中的线程优先级是在 Thread 类中定义的常量 NORM_PRIORITY : 值为 5 MAX_PRIORITY : 值为 10 MIN_PRIORITY : 值为 1 缺省优先级为 NORM_PRIORITY 有关优先级的方法有两个: final void setPriority(int newp) : 修改线程的当前优先级 final int getPriority() : 返回线程的优先级 13.2.1 多线程的实现方法 通过以下两种方法创建 Thread 对象: 1.声明一个 Thread 类的子类,并覆盖 run() 方法。 class mythread extends Thread { public void run( ) {/* 覆盖该方法*/ } } 2.声明一个实现 Runnable 接口的类,并实现 run() 方法。 class mythread implements Runnable{ public void run( ) {/* 实现该方法*/ } } 13.2.2 多线程的控制 1.终止线程 stop()方法。 2.测试线程状态 isAlive()方法。 3.线程的暂停和恢复 sleep() suspend()和resume() join() 13.3.1 多线程的互斥 有时两个或多个线程可能会试图同时访问一个资源 例如,一个线程可能尝试从一个文件中读取数据,而另一个线程则尝试在同一文件中修改数据 在此情况下,数据可能会变得不一致 为了确保在任何时间点一个共享的资源只被一个线程使用,使用了“互斥” 两种方式实现互斥: 使用互斥方法 synchronized void methodA() { } 使用互斥块 synchronized(object) { //要互斥的语句 } 13.3.2 多线程的同步 为避免轮流检测,Java提供了一个线程间通信机制,使用wait()、notify()和notifyAll()方法 。 这些方法仅在 synchronized 方法中才能被调用。 wait()方法告知被调用的线程退出监视器并进入等待状态,直到其他线程进入相同的监视器并调用 notify( ) 方法。 notify( ) 方法通知同一对象上第一个调用 wait( )线程。 notifyAll() 方法通知调用 wait() 的所有线程,具有最高优先级的线程将先运行。 13.3.3 线程的死锁 当两个线程循环依赖于一对同步对象时将发生死锁。例如: 一个线程进入对象ObjA上的监视器,而另一个线程进入对象ObjB上的监视器。如果ObjA中的线程试图调用ObjB上的任何 synchronized 方法,就将发生死锁。 死锁很少发生,但一旦发生就很难调试 总结 1、掌握线程的基本概念 2、掌握线程的状态和生命周期 。 3、可通过两种方式创建线程:继承Thread类、实现Runnable 接口。 4、线程的互斥。 5、线程的同步。 JAVA语言程序设计 新建状态 就绪状态 阻塞状态 运行状态 死亡状态 (课程名称)(章节号) 标题 正文 * *
文档评论(0)