北大青鸟 c 第十一章 线程 Ⅴ ersion3.0 CHA
Version 3.0 线程 第十一章
回顾 每个用户自定义的 Applet都必须扩展 java, applet Applet类。 在HTML文件中用. 向 Applet传专递参数 通过 paint()、 getImage(和 drawImage(方 法可以在 Applet中绘制图像 北大青鸟
2 回顾 • 每个用户自定义的Applet 都必须扩展 java.applet.Applet 类。 • 在 HTML 文件中用.. 标记嵌 入类文件。 • Applet 的执行从 init() 方法开始 • 通过 向Applet传递参数 • 通过 paint( )、getImage( ) 和 drawImage( ) 方 法可以在Applet 中绘制图像
目标 了解多线程的概念 掌握如何创建线程 了解死锁的概念 ·掌握线程同步 掌握使用wait0和nty在线程之间进 行通信 北大青鸟
3 目标 • 了解多线程的概念 • 掌握如何创建线程 • 了解死锁的概念 • 掌握线程同步 • 掌握使用 wait() 和 notify() 在线程之间进 行通信
多任务处理 多任务处理有两种类型: 基于进程 -基于线程 进程是指一种“自包容”的运行程序,有 自己的地址空间线程是进程内部单一的一 个顺序控制流 基于进程的特点是允许计算机同时运行两 个或更多的程序 基于线程的多任务处理环境中,线程是最 小的处理单位 北大青鸟
4 多任务处理 • 进程是指一种“自包容”的运行程序,有 自己的地址空间;线程是进程内部单一的一 个顺序控制流 • 基于进程的特点是允许计算机同时运行两 个或更多的程序。 • 基于线程的多任务处理环境中,线程是最 小的处理单位。 多任务处理有两种类型: - 基于进程 - 基于线程
基于线程的多任务处理的优点 基于线程所需的开销更少 在多任务中,各个进程需要分配它们自己独 立的地址空间 多个线程可共享相同的地址空间并且共同分 享同一个进程 进程间调用涉及的开销比线程间通信多 线程间的切换成本比进程间切换成本低 北大青鸟
5 基于线程的多任务处理的优点 • 基于线程所需的开销更少 – 在多任务中,各个进程需要分配它们自己独 立的地址空间 – 多个线程可共享相同的地址空间并且共同分 享同一个进程 • 进程间调用涉及的开销比线程间通信多 • 线程间的切换成本比进程间切换成本低
多线程 ·多线程 在Java中,一个应用程序可以包含多个线程。 每个线程执行特定的任务,并可与其他线程并 发执行 多线程使系统的空转时间最少,提高cPU利用 率 多线程编程环境用方便的模型隐藏cPU在任务 问切换的事实 6 北大青鸟
6 多线程 • 多线程 – 在Java中,一个应用程序可以包含多个线程。 每个线程执行特定的任务,并可与其他线程并 发执行 – 多线程使系统的空转时间最少,提高CPU利用 率 – 多线程编程环境用方便的模型隐藏CPU在任务 间切换的事实
主线程 在Java程序启动时,一个线程立刻运行 该线程通常称为程序的主线程。 主线程的重要性体现在两个方面: 它是产生其他子线程的线程。 通常它必须最后完成执行,因为它执行各种 关闭动作。 北大青鸟
7 主线程 • 在Java程序启动时,一个线程立刻运行, 该线程通常称为程序的主线程。 • 主线程的重要性体现在两个方面: – 它是产生其他子线程的线程。 – 通常它必须最后完成执行,因为它执行各种 关闭动作
主线程示例 class Mythread extends Thread i public static void main( String args y获得当线程, Thread t= Thread currentThread ()i 即主线程 System. out. print1n("当前线程是:"+t) t setName("My Java Thread"); 改变线程的 内部名称 System. out. println("当前线程名是:"+t); try for(int主=0; java Mythread Thread [main.5. main] 名是: Thread[MyJavaThread,5,nain] catch(InterruptedExcept: 5 System.out. println("* 北大青鸟
8 主线程示例 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++) { System.out.println(i); Thread.sleep(1500); } } catch(InterruptedException e) { System.out.println("主线程被中断"); } } } 获得当前线程, 即主线程 改变线程的 内部名称 输出每个数后 暂停1500毫 秒
创建线程21 ·通过以下两种方法创建 Thread对象 声明一个 Thread类的子类,并覆盖run0方法。 class mythread extends Thread i pub1 ic void run(){/覆盖该方法*/} 声明一个实现 Runnable接口的类,并实现run0 方法。 class mythread implements Runnable public void run(){/实现该方法*/ 北大青鸟
9 创建线程 2-1 • 通过以下两种方法创建Thread 对象: - 声明一个 Thread 类的子类,并覆盖 run() 方法。 class mythread extends Thread { public void run( ) {/* 覆盖该方法*/ } } - 声明一个实现 Runnable 接口的类,并实现 run() 方法。 class mythread implements Runnable{ public void run( ) {/* 实现该方法*/ } }
创建线程22 要触发一个新线程,使用star方法,如 Mythread t new Mythread)i 七. start(); ·在调用 start(方法时,将刨建一个新的控 制线程,接着它将调用run方法。 ·run(方法中的代码定义执行线程所需的功 能。 北大青鸟
10 创建线程 2-2 • 要触发一个新线程,使用 start() 方法,如: Mythread t = new Mythread(); t.start(); • 在调用 start() 方法时,将创建一个新的控 制线程,接着它将调用run() 方法。 • run() 方法中的代码定义执行线程所需的功 能