1 / 13

多线程

第九章. 多线程. 回顾. 输入/输出流的概念和类层次结构 主要字节流的定义和使用 主要字符流的定义和使用 文件管理以及文件操作 对象串行化的概念和实现方法 了解其他常用流的定义和使用. 目标. 掌握多线程的概念 掌握如何创建线程 了解死锁的概念 了解线程同步 了解使用 wait() 和 notify() 在线程之间进行通信. 9.1.1 多线程的概念. 程序: 静态的计算机高级语言编写的代码。 进程:程序的一次执行。 线程: 程序中的部分代码的一次执行过程。 多进程:操作系统中多个程序同时执行。 多线程:程序中多个片断同时执行。.

jera
Download Presentation

多线程

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第九章 多线程

  2. 回顾 • 输入/输出流的概念和类层次结构 • 主要字节流的定义和使用 • 主要字符流的定义和使用 • 文件管理以及文件操作 • 对象串行化的概念和实现方法 • 了解其他常用流的定义和使用

  3. 目标 • 掌握多线程的概念 • 掌握如何创建线程 • 了解死锁的概念 • 了解线程同步 • 了解使用 wait() 和 notify() 在线程之间进行通信

  4. 9.1.1 多线程的概念 • 程序:静态的计算机高级语言编写的代码。 • 进程:程序的一次执行。 • 线程:程序中的部分代码的一次执行过程。 • 多进程:操作系统中多个程序同时执行。 • 多线程:程序中多个片断同时执行。

  5. 9.1.2 Java中的多线程 • Thread类是java.lang包中的一个专门用来创建线程和对线程进行操作的类。这些方法分为: • 构造方法。 • run()方法。 • 改变线程状态的方法。 • 操作线程属性的方法。

  6. 9.1.3 线程的状态和生命周期 新建状态 就绪状态 • 新建 : 新建的线程处于新建状态 • 就绪 : 在创建线程后,它将处于就绪状态,等待 start() 方法被调用 • 执行: 线程在开始执行时进入运行状态 • 阻塞:在线程等待一个事件时(例如输入/输出操作),就称其处于阻塞状态。 • 死亡:在 run() 方法已完成执行或其 stop() 方法被调用之后,线程就处于死亡状态。 阻塞状态 运行状态 死亡状态

  7. 9.1.4 线程的调度和优先级 • Java 中的线程优先级是在 Thread 类中定义的常量 • NORM_PRIORITY : 值为 5 • MAX_PRIORITY : 值为 10 • MIN_PRIORITY : 值为 1 • 缺省优先级为NORM_PRIORITY • 有关优先级的方法有两个: • final void setPriority(int newp) : 修改线程的当前优先级 • final int getPriority() : 返回线程的优先级

  8. 9.2.1 多线程的实现方法 • 通过以下两种方法创建 Thread 对象: 1.声明一个 Thread 类的子类,并覆盖run()方法。 class mythread extends Thread { public void run( ) {/* 覆盖该方法*/} } 2.声明一个实现 Runnable 接口的类,并实现run()方法。 class mythread implements Runnable{ public void run( ) {/* 实现该方法*/} }

  9. 9.2.2 多线程的控制 1.终止线程 stop()方法。 2.测试线程状态 isAlive()方法。 3.线程的暂停和恢复 sleep() suspend()和resume() join()

  10. 9.3.1 多线程的互斥 • 有时两个或多个线程可能会试图同时访问一个资源 例如,一个线程可能尝试从一个文件中读取数据,而另一个线程则尝试在同一文件中修改数据 • 在此情况下,数据可能会变得不一致 • 为了确保在任何时间点一个共享的资源只被一个线程使用,使用了“互斥” • 两种方式实现互斥: • 使用互斥方法 synchronized void methodA() { } • 使用互斥块 synchronized(object) { //要互斥的语句 }

  11. 9.3.2 多线程的同步 • 为避免轮流检测,Java提供了一个线程间通信机制,使用wait()、notify()和notifyAll()方法 。 • 这些方法仅在 synchronized 方法中才能被调用。 • wait()方法告知被调用的线程退出监视器并进入等待状态,直到其他线程进入相同的监视器并调用notify( )方法。 • notify( )方法通知同一对象上第一个调用wait( )线程。 • notifyAll() 方法通知调用 wait()的所有线程,具有最高优先级的线程将先运行。

  12. 9.3.3 线程的死锁 • 当两个线程循环依赖于一对同步对象时将发生死锁。例如: 一个线程进入对象ObjA上的监视器,而另一个线程进入对象ObjB上的监视器。如果ObjA中的线程试图调用ObjB上的任何 synchronized 方法,就将发生死锁。 • 死锁很少发生,但一旦发生就很难调试

  13. 总结 1、掌握线程的基本概念 2、掌握线程的状态和生命周期 。 3、可通过两种方式创建线程:继承Thread类、实现Runnable 接口。 4、线程的互斥。 5、线程的同步。

More Related