第9章多线程_2.ppt

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9章多线程_2

提问: 1、在Java中有几种方式创建线程? 线程的优先级 Java虚拟机允许一个应用程序拥有多个同时执行的线 程,线程的执行顺序取决于 线程的优先级。 Java 中的线程优先级是在 Thread 类中定义的常量. 优先级高的先执行,低的后执行,相同的遵循“先进先出” NORM_PRIORITY : 值为 5 MAX_PRIORITY : 值为 10 MIN_PRIORITY : 值为 1 缺省优先级为 NORM_PRIORITY 有关优先级的方法有两个: final void setPriority(int newp) : 修改线程的当前优先级 final int getPriority() : 返回线程的优先级 线程的调度 Java的线程调度策略是一种基于优先级的抢占式调度。 “抢占式“ 和 ”协作式” 是相对的概念。 在低优先级线程的执行过程中,来了高优先级的线程。 ”协作式”:高优先级的线程要等待低优先级线程执行完; “抢占式“:高优先级的线程要抢占 低优先级的控制权。 程序中有多个线程它们的执行顺序会怎样? ThreadDemo_1.java 多线程的控制 Thread类提供了如下基本线程控制方法 1、? sleep() sleep()方法能够把CPU时间让给优先级比其低的线程。该方法 是使一个线程暂停运行一段固定的时间。在休眠时间内,线程 将不运行。 有时高优先级的线程需要与低优先级的线程进行同步,或需 要完成一些费时的操作,则高优先级线程将让出CPU,使优先级 低的线程有机会运行。高优先级的线程可以在它的run()方法 中调用sleep()方法使自己退出CPU,休眠一段时间。 2、? yield() 调用该方法后,可以使具有与当前线程相同优先级的线程有 运行的机会。如果有其他的线程与当前线程具有相同优先级, 并是可运行的,该方法将把调用yield()方法的线程放入可运行 线程池,并允许其他线程运行。如果没有同等优先级的线程是 Runnable状态,yield()方法将什么也不做,即该线程将继续运 行。 3、join() 使当前线程等待调用该方法的线程执行完毕之后再继续。 4、currentThread() Thread类的静态方法currentThread()返回当前线程,具体 是返回当前线程的引用 5、isAlive() 有时线程的状态可能未知,用isAlive()测试线程以确定线 程是否活着。该方法返回true意味着线程已经启动但还没有运 行结束。 isAlive()方法:激活的返回true; 新创建或已被终止的,返回false。 示例:thread\classCode\ThreadJoin.java; 6、? stop() 当线程完成运行并结束后,将不再运行。线程除正常运行结 束外,还可用其他方法控制使其停止:用stop()方法,强行终 止线程。该方法的调用容易造成线程的不一致,因此不提倡采 用这种方法。可以使用标志flag,通过设置flag通知一个线程应 该结束。 7、suspend()与resume() 在一个线程中调用t.suspend(),将使另一个线程t暂停执行。 要想恢复线程,必须由其他线程调用t.resume()。不提倡使用 该方法,因为容易造成死锁。 线程周期及状态转换 示例: thread\classCode\testThreadState.java testThreadPriority.java 多线程的同步:多个线程试图同时访问一个资源 铁路售票系统: 有四个售票点发售某日某次列车的100张车票,票(ticket)是 共享资源,其中一个售票点在发售某张票的时候,其余售票点 便不能进行售票,必须等这个售票点发售完这一张票,释放对 共享资源(ticket)的使用权后,才能进行售票。如下面的代码: if(tickets0) System.out.println(Thread.currentThread().getName()+”is sailing ticket”+tickets--); 程序中不可能有多个线程同时在这两句代码之间执行,这就是线程同步。 Java中对共享数据操作的并发控制是采用传统的封锁技术。 Synchronized:在Java中为保证线程对共享资源操作的完整性,用关键字synchronized为共享资源加锁来解决。此锁使共享资源对线程是互斥操作的,称为互斥锁。 同步块内的操作是原子操作。 多线程的同步 两种方式实现互斥: 使用互斥方法 synchronized v

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档