JAVA多线程(附示例代码).pptx_第1页
JAVA多线程(附示例代码).pptx_第2页
JAVA多线程(附示例代码).pptx_第3页
JAVA多线程(附示例代码).pptx_第4页
JAVA多线程(附示例代码).pptx_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JAVA多线程 概念线程应用线程状态线程属性线程同步Q A 概念 多任务系统进程线程 示例 单线程程序多线程程序 线程应用java lang Thread 使用线程的两种常用方式实现Runnable接口的run方法classMyRunnableimplementsRunnable publicvoidrun System out println hello MyRunnabler newMyRunnable Threadthread newThread r thread start 线程应用java lang Thread 2 继承Thread 覆盖run方法 不推荐 classMyThreadextendsThread publicvoidrun System out println MyThread runisrunning MyThreadt newMyThread t start Nevercallt run 线程状态Thread State NEW 新生 至今尚未启动的线程处于这种状态 RUNNABLE 可运行 正在Java虚拟机中执行的线程处于这种状态 BLOCKED 被阻塞 受阻塞并等待某个监视器锁的线程处于这种状态 WAITING 等待 无限期地等待另一个线程来执行某一特定操作的线程处于这种状态 TIMED WAITING 计时等待 等待另一个线程来执行取决于指定等待时间的操作的线程处于这种状态 TERMINATED 被终止 已退出的线程处于这种状态 线程状态 中断线程 Thread interrupt 该方法被调用时 线程的中断状态 boolean 将被置位 线程应不时的检查这个中断状态标志 以判断线程是否被中断 进一步决定如何响应中断 中断线程 Thread interrupt Publicvoidrun try while Thread currentThread isInterrupted morecondiitontocheck 线程任务代码 catch InterruptedExceptione 线程处于sleep或wait被中断 会导致该 异常产生 finally 清理工作 退出run方法 结束该线程 线程属性 线程优先级守护线程未捕获异常处理器 线程优先级 线程优先级高度依赖于操作系统 1 windows有7个优先级别 一些JAVA线程优先级将映射至操作系统优先级 2 在Sun为linux提供的JVM中 线程优先级被忽略请勿将程序构建为功能的正确性依赖于线程优先级 例 调度框架 守护线程 作用 为其他线程提供服务 例 1 计时线程 定时发送时间信号给其他线程 2 定期清空过时的缓存内容的线程当只剩下守护线程时 虚拟机就会退出设置方式thread setDaemon true 未捕获异常处理器 线程Run方法不能抛出任何被检测的异常不被检测的异常会导致线程终止 线程在死亡前 异常会被传递至一个用于未捕获异常的处理器中 Thread UncaughtExceptionHandlerthread setDefaultUncaughtExceptionHandler如果不为独立的线程设置处理器 则此时的处理器为该线程的ThreadGroup对象 线程组ThreadGroup 线程组是一个可以统一管理的线程集合ThreadGroup实现了Thread UncaughtExceptionHandler接口 它的uncaughtException方法执行以下操作 1 如果该线程组有父线程组 那么父线程组的uncaughtException方法被调用 2 否则 如果Thread getDefaultExceptionHandler方法返回一个非空值 则调用该处理器 3 否则 如果Throwable是ThreadDeath的一个实例 则不作任何处理 4 否则 线程的名字以及Throwable的栈踪迹被速出到System err上 线程组ThreadGroup 从JAVASE5 0起引入了更好的特性用于线程集合 java util concurrent 的操作 请不要在自己的程序中使用线程组 线程同步 竞争条件 RaceCondition 实现线程同步的方式Volatile域死锁 竞争条件 竞争条件 RaceCondition 在大多数实际的多线程应用中 根据线程的访问数据的次序 被多个线程共享访问 修改的对象可能会出现错误的情况 示例模拟一有若干账户的银行 随机地生成在这些账户之间转移钱款的交易 每个账户有一个执行交易的线程 每一个笔交易中 会从线程所服务的账户中随机转移一定数目的钱款到另一个随机账户 银行总钱数保持不变 竞争条件 示例分析假定两个线程同时执行指令 to值相同 Accounts to amount 这句不是原子操作 该指令实际可能被拆分成 可用命令javap c v ClassName 反编译查看字节码 1 将accounts to 加载至寄存器 CPU 2 增加amount 3 将结果写回accounts to 假定线程1执行步骤1 2 然后被剥夺运行权 此时线程2被唤醒并执行完以上3个步骤 修改同一个account to 然后线程1被唤醒继续完成其步骤3 实现线程同步的方式 锁对象条件对象synchronized关键字 锁对象 java util concurrent locks ReentrantLockprivateLockbankLock newReentrantLock bankLock lock Try criticalsection Finally bankLock unlock 条件对象 又称条件变量conditionalvariable通常 线程获得锁进入临界区后 却发现在某一条件满足之后才能继续执行 一个锁对象可以有一个或多个相关的条件对象 lock newCondition 条件对象 privateLockbankLock newReentrantLock privateConditionsufficientFunds bankLock newCondition bankLock lock Try while accounts from amount sufficientFunds await transferfundssufficientFunds signalAll Finally bankLock unlock synchronized关键字 publicsynchronizedvoidmethod methodbody 功能上等价于Locklock newReentrantLock Publicvoidmethod this lock lock try methodbody finally this lock unlock synchronized关键字 1 publicsynchronizedvoidmethod methodbody 2 publicsynchronizedstaticvoidmethod methodbody 3 Objectobj newObject publicvoidmethod synchronized obj methodbody Volatile 多处理器的计算机能够暂时在寄存器或本地内存缓存区中保存内存的值 结果是 运行在不同处理器上的线程可能在同一个内存位置取到不同的值 Volatile关键字为实例域的同步访问提供了一种免锁机制 可被看做是一种 程度较轻的synchronized 具有synchronized的可见性特性 但是不具备原子特性 Volatile 锁提供了两种主要特性 互斥 mutualexclusion 和可见性 visibility 互斥即一次只允许一个线程持有某个特定的锁 因此可使用该特性实现对共享数据的协调访问协议 这样 一次就只有一个线程能够使用该共享数据 可见性要更加复杂一些 它必须确保释放锁之前对共享数据做出的更改对于随后获得该锁的另一个线程是可见的结合使用volatile和synchronized实现 开销较低的读 写锁 publicclassCheesyCounter privatevolatileintvalue publicintgetValue returnvalue publicsynchronizedintincrement returnvalue synchronized确保增量操作是原子的 并使用volatile保证当前结果的可见性 死锁 当两个或两个以上的线程在执行过程中 因争夺资源而造成的一种互相等待的现象 若无外力作用 它们都将无法推进下去 形成死锁的四个必要条件1 互斥使用 资源独占 一个资源每次只能给一个线程使用2 不可强占 不可剥夺 资源申请者不能强行的从资源占有者手中夺取资

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论