传智播客java基础加强班PPT---Java基础班讲义线程

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

北京传智播客教育 www.itcast.cn
—高级软件人才实作培训专家! 高级软件人才实作培训专家! 线程的状态 4-4
新线程(新建) 新线程(新建)
就绪
睡眠 运行 等待 死亡
挂起
阻塞
北京传智播客教育 www.itcast.cn
—高级软件人才实作培训专家! 高级软件人才实作培训专家! 可能使线程暂停执行的条件 • 线程: 线程:
• 要触发一个新线程,使用 start() 方法,如: 要触发一个新线程, 方法,
Mythread t = new Mythread(); t.start();
• 在调用 start() 方法时,将创建一个新的控 方法时, 制线程, 方法。 制线程,接着它将调用 run() 方法。 • run() 方法中的代码定义执行线程所需的功 能。
- 声明一个实现 Runnable 接口的类,并实现 run() 接口的类, 方法。 方法。
class mythread implements Runnable{ public void run( ) {/* 实现该方法*/ } 实现该方法*/ } 北京传智播客教育 www.itcast.cn
—高级软件人才实作培训专家! 高级软件人才实作培训专家! 创建线程 2-2
- 线程优先级比较低,因此它不能获得 CPU 线程优先级比较低, 时间。 时间。 - 使用 sleep( ) 方法使线程睡眠。 方法使线程睡眠。 - 通过调用 wait( ) 方法,使线程等待。 方法,使线程等待。 - 通过调用 yield( ) 方法,线程已显式出让 方法,线程已显式出让CPU 控制权。 控制权。 - 线程由于等待一个文件 事件被阻塞。 线程由于等待一个文件I/O事件被阻塞 事件被阻塞。
final String getName( ) final boolean isAlive() final void setName(String name) final void join( ) throws InterruptedException
北京传智播客教育 www.itcast.cn
—高级软件人才实作培训专家! 高级软件人才实作培训专家! Thread 类中的重要方法 2-2
北京传智播客教育 www.itcast.cn
—高级软件人才实作培训专家! 高级软件人才实作培训专家! 创建线程示例
class MyThread1 extends Thread { public static void main(String args[]) { Thread t= Thread.currentThread(); System.out.println("主线程是: "+t); MyThread1 ex = new MyThread1(); ex.start(); } public void run() { System.out.println("子线程是:"+this); } }
北京传智播客教育 www.itcast.cn
—高级软件人才实作培训专家! 高级软件人才实作培训专家! 线程状态的示例
class ThreadStateDemo extends Thread { Thread t; public ThreadStateDemo() { t=new Thread(this); System.out.println ("线程 t 为新建!"); System.out.println ("线程 t 为就绪!"); t.start(); } public void run() { try { System.out.println ("线程 t 在运行!"); t.sleep(500); public static void main(String 在短时间睡眠后重新运行!"); System.out.println("线程 t args[]) { new ThreadStateDemo(); } catch (InterruptedException IE) { } System.out.println("线程被中断"); } } 北京传智播客教育 www.itcast.cn }
北京传智播客教育 www.itcast.cn
多任务处理有两种类型: 多任务处理有两种类型: - 基于进程 - 基于线程
—高级软件人才实作培训专家! 高级软件人才实作培训专家! 基于线程的多任务处理的优点
• 基于线程所需的开销更少
– 在多任务中,各个进程需要分配它们自己独 在多任务中, 立的地址空间 – 多个线程可共享相同的地址空间并且共同分 享同一个进程
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
Java 基础班讲义
北京传智播客教育 www.itcast.cn
—高级软件人才实作培训专家! 高级软件人才实作培训专家! 目标
• • • • •
了解多线程的概念 掌握如何创建线程 掌握线程同步 了解死锁的概念 掌握使用 wait() 和 notify() 在线程之间 进行通信
获得当前线程, 获得当前线程, 即主线程
class Mythread extends Thread { public static void main(String args[]) { 改变线程 Thread t= Thread.currentThread(); 的内部名 System.out.println("当前线程是: "+t); 称 t.setName("MyJavaThread"); System.out.println("当前线程名是: "+t); try { for(int i=0;i<3;i++) { 输出每个数后 暂停1500 1500毫秒 暂停1500 Thread.sleep(1500); System.out.println(i);毫秒 } } catch(InterruptedException e) { System.out.println("主线程被中断"); } } 北京传智播客教育 www.itcast.cn }
方法
final boolean isDaemon( ) final void setDaemon(boolean on) static void sleep( ) void start( ) static int activeCount( ) static void yield()
用途
检查线程是否为精灵线程 根据传入的参数,将线程标记为精灵线程 或用户线程 用于将线程挂起一段时间 调用run( )方法启动线程,开始线程的执行 返回激活的线程数
使正在执行的线程临时暂停,并允许其他线程执行
北京传智播客教育 www.itcast.cn
—高级软件人才实作培训专家! 高级软件人才实作培训专家! 线程优先级
• Java 中的线程优先级是在 Thread 类中定义 的常量
- NORM_PRIORITY : 值为 5 - MAX_PRIORITY : 值为 10 - MIN_PRIORITY : 值为 1
—高级软件人才实作培训专家! 高级软件人才实作培训专家! Thread 类中的重要方法 2-1
方法Leabharlann Baidu
static int enumerate(Thread [ ] t)
用途
将线程所在的线程组及其子组中所有活 动的线程复制到指定数组中,返回线程 的个数 返回线程的名称 如果线程是激活的,则返回 true 将线程的名称设置为由name指定的名称 等待线程结束
• 缺省优先级为 NORM_PRIORITY • 有关优先级的方法有两个: 有关优先级的方法有两个:
- final void setPriority(int newp) : 修改线程的当前优先级 - final int getPriority() : 返回线程的优先级
北京传智播客教育 www.itcast.cn
北京传智播客教育 www.itcast.cn
—高级软件人才实作培训专家! 高级软件人才实作培训专家! 主线程
• 在Java程序启动时,一个线程立刻运行, 程序启动时,一个线程立刻运行, 程序启动时 该线程通常称为程序的主线程。 该线程通常称为程序的主线程。 • 主线程的重要性体现在两个方面: 主线程的重要性体现在两个方面:
北京传智播客教育 www.itcast.cn
—高级软件人才实作培训专家! 高级软件人才实作培训专家! 线程状态4-3
• 阻塞 (Blocked) – 在线程等待一个事件时(例 在线程等待一个事件时( 如输入/输出操作),就称其处于阻塞状态 输出操作),就称其处于阻塞状态。 如输入 输出操作),就称其处于阻塞状态。 • 死亡 (Dead) – 在 run() 方法已完成执行或其 stop() 方法被调用之后,线程就处于死亡状 方法被调用之后, 态。
北京传智播客教育 www.itcast.cn
—高级软件人才实作培训专家! 高级软件人才实作培训专家! 线程的状态4-2
• 等待 (Waiting) : 如果调用了 wait() 方法, 方法, 线程将处于等待状态。 线程将处于等待状态。用于在两个或多 个线程并发运行时。 个线程并发运行时。 • 挂起 (Suspended) : 在临时停止或中断线 程的执行时,线程就处于挂起状态。 程的执行时,线程就处于挂起状态。 • 恢复 (Resume) : 在挂起的线程被恢复执行 可以说它已被恢复。 时,可以说它已被恢复。
北京传智播客教育 www.itcast.cn
—高级软件人才实作培训专家! 高级软件人才实作培训专家! 多任务处理
• 进程是指一种“自包容”的运行程序,有 进程是指一种“自包容”的运行程序, 自己的地址空间; 自己的地址空间;线程是进程内部单一的 一个顺序控制流 • 基于进程的特点是允许计算机同时运行两 个或更多的程序。 个或更多的程序。 • 基于线程的多任务处理环境中,线程是最 基于线程的多任务处理环境中, 小的处理单位。 小的处理单位。
–它是产生其他子线程的线程。 它是产生其他子线程的线程。 它是产生其他子线程的线程 –通常它必须最后完成执行,因为它执行各 通常它必须最后完成执行, 通常它必须最后完成执行 种关闭动作。 种关闭动作。
北京传智播客教育 www.itcast.cn
—高级软件人才实作培训专家! 高级软件人才实作培训专家! 主线程示例
—高级软件人才实作培训专家! 高级软件人才实作培训专家! 创建线程 2-1
• 通过以下两种方法创建 Thread 对象: 对象: - 声明一个 Thread 类的子类,并覆盖 run() 方法。 类的子类, 方法。
class mythread extends Thread { public void run( ) {/* 覆盖该方法*/ } 覆盖该方法 该方法*/ }
北京传智播客教育 www.itcast.cn
或者使用 implements Runnable
—高级软件人才实作培训专家! 高级软件人才实作培训专家! 线程的状态 4-1
• •


新建 (Born) : 新建的线程处于新建状态 就绪 (Ready) : 在创建线程后,它将处于 就绪状态,等待 start() 方法被调用 运行 (Running) : 线程在开始执行时进入 运行状态 睡眠 (Sleeping) : 线程的执行可通过使用 sleep() 方法来暂时中止。在睡眠后,线 程将进入就绪状态
• 进程间调用涉及的开销比线程间通信多 • 线程间的切换成本比进程间切换成本低
北京传智播客教育 www.itcast.cn
—高级软件人才实作培训专家! 高级软件人才实作培训专家! 多线程
• 多线程
–在Java中,一个应用程序可以包含多个线程。 在 中 一个应用程序可以包含多个线程。 每个线程执行特定的任务, 每个线程执行特定的任务,并可与其他线程并 发执行 –多线程使系统的空转时间最少,提高 多线程使系统的空转时间最少, 多线程使系统的空转时间最少 提高CPU利用 利用 率 –多线程编程环境用方便的模型隐藏 多线程编程环境用方便的模型隐藏CPU在任务 多线程编程环境用方便的模型隐藏 在任务 间切换的事实
相关文档
最新文档