十多线程.ppt

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

多线程 多任务操作系统 操作系统将CPU时间划分为小的片段,并将其分配给不同的进程,从而在单个CPU上实现并发处理 进程是程序一次动态执行的过程,对应从代码加载、执行到执行结束的一个完整过程。每个进程有一段专有的内存空间,称为PCB(进程控制块) 线程 线程是比进程更小的执行单元,一个进程在执行过程中,可以产生多个线程 每个线程都有自身的产生、执行和消亡的过程。 多线程与多进程的区别 本质区别:每个进程有自己的变量的完备集,线程则共享相同的数据 共享变量使线程之间的通信比进程间的通信更加有效和简单 对于某些操作系统而言,线程比进程更“轻量级”,创建和销毁单个线程比发起进程的开销要小得多 线程的用途 程序中的某个部分与一个特定的事件或资源联系在了一起,而你又不想让这种联系阻碍程序其余部分的运行 Java内置了线程的支持,使得用Java进行多线程编程相对简单 不使用线程 对于一个不使用线程的程序,很难通过编程让它去执行多个任务 Bounce.java BounceThread.java 创建线程-Thread类 创建线程最简单的做法是继承一个java.lang.Thread类,并重写run()方法以实现所需要的功能 Thread类的start()方法为线程执行特殊的初始化方法,然后调用run()方法 直接调用run()方法不会启动新的线程,而只会在当前线程中执行任务 SimpleThread.java 创建线程-Runnable接口 任何线程类都必须实现java.lang.Runnable接口 void run() 继承Thread类和实现Runnable接口都可以用来创建Thread对象,效果上并没有不同 继承Thread类的缺点在于这个类不能再继承其他的类,因此,开发中不应该采用直接继承Thread类的方式 Runnable接口使用模式 1、创建一个实现了Runnable接口的类 2、创建类的一个对象 3、由Runnable创建一个Thread对象 4、启动线程 Thread类的其他方法 static void yield():暗示暂停当前线程,并执行其他线程,但线程调度机制不保证此暗示被采纳。 YieldingThread.java static void sleep(long millis):使线程暂停执行一段时间 中断线程 线程将在其run()方法返回时终止 没有方法可以强制终止一个线程,但可以用interrupt()方法来请求终止一个线程 当interrupt方法在一个线程上调用时,该线程的中断状态(interrupt status)将被置位 中断状态是一个布尔型的标志,存在于每一个线程中 线程应该查看此标志以判断线程是否应该被中断 线程优先级 每一个线程都有一个优先级,默认情况下,一个线程继承它的父线程的优先级 可以设置一个线程的优先级 setPriority(int newPriority) MIN_PRIORITY 1 MAX_PRIORITY 10 NORM_PRIORITY 5 线程的优先级高度依赖于操作系统 线程组 Java允许程序员创建线程组,这样就可以同时对一组线程进行操作 构造器中的String用于标识线程组,必须惟一 查看特定线程组中是否有线程处于可运行状态 线程组(续) 中断一个线程组中的所有线程 线程组可以有子线程组,默认情况下,新线程组是当前线程的子线程组 线程状态 New新生 当用new操作符创建一个线程时,线程还没有开始运行的状态 Runnable可运行 一旦调用了start()方法,该线程就成为可运行的了 一个可运行线程可能实际上正在运行,也可能没有,这取决于操作系统为该线程提供的运行时间 线程状态(续) Blocked被阻塞,有以下几种情况 线程通过调用sleep进入睡眠状态 线程调用一个在I/O上被阻塞的操作,即该操作在I/O操作完成之前不会返回它的调用者 线程试图得到一个锁,而该锁正被其他线程持有 线程在等待某个触发条件 Dead死亡 run()方法正常退出 线程状态转换图 同步 实际的多线程应用中,往往涉及到多个同时运行的线程需要对相同的对象进行共享访问 当多个线程都调用了一个会改变对象状态的方法,那么可能会产生不可预计的结果 UnsynchBankTest.java 锁对象 Java中可使用两种机制来保护代码不受并发访问的干扰:synchronized关键字和ReentrantLock类 ReentrantLock实现了Lock接口,提供了比synchronized更为强大和灵活的功能 ReentranceLock使用结构 这种结构保证在任何时刻只有一个线程能够进入临界区 一旦一个线程锁住了锁对象,其他任何线程都无法通过lock()语句 Reent

文档评论(0)

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

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

1亿VIP精品文档

相关文档