第十三章 多线程 课程内容:多线程概念、通过Thread类 Runnable接口编写线程、线程控制与线程状态、 线程组、线程同步、Applet的线程 ■授课时间:2006/11/27 ■教学目标:了解多线程概念;学习如何通过 Thread类、Runnable接☐编写线程;了解线程 周期,掌握设置线程的优先级;学习使用线程 同步避免资源冲突等 ■了 重点:多线程的编写、控制和使用 ■教学方法:讲授 ■教学过程:(省略) ©2006计算机系杨群 All rights lefts reserved
©2006 计算机系 杨厚群 All rights & lefts reserved. 课程内容:多线程概念、通过Thread类、 Runnable接口编写线程、线程控制与线程状态、 线程组、线程同步、Applet的线程 授课时间:2006/11/27 教学目标:了解多线程概念;学习如何通过 Thread类、Runnable接口编写线程;了解线程 周期,掌握设置线程的优先级;学习使用线程 同步避免资源冲突等 重点:多线程的编写、控制和使用 教学方法:讲授 教学过程:(省略) 第十三章 多线程
多线程概念 多线程在 Thread 1 多CPU上运 Thread 2 行 Thread 3 多线程分享 Thread 1 单个CPU Thread 2 Thread 3 ©2006计算机系杨厚群 All rights lefts reserved
©2006 计算机系 杨厚群 All rights & lefts reserved. 多线程概念 Thread 3 Thread 2 多线程在 Thread 1 多CPU上运 行 多线程分享 单个 CPU Thread 3 Thread 2 Thread 1
扩展Thread类创建线程 /Custom thread class /client class oublic class CustomThread extends Thread public class client public CustomThread(.) public someMethod() { /Create a thread CustomThread thread -new CustomThread(.) /Override the run method in Thread public void run() /Start a thread thread.start(); /Tell system how to run custom thread ©2006计算机系杨群 All rights lefts reserved
©2006 计算机系 杨厚群 All rights & lefts reserved. 扩展Thread类创建线程 // Custom thread class public class CustomThread extends Thread { . public CustomThread(.) { . } // Override the run method in Thread public void run() { // Tell system how to run custom thread . } . } // Client class public class Client { . public someMethod() { . // Create a thread CustomThread thread = new CustomThread(.); // Start a thread thread.start(); . } . }
范例:使用Thread类创建并运行线程 创建并运行三个线程: - 第一个线程打印100次字母a -第二个线程打印100次字母b 第三个线程打印整数1到100 TestThread ©2006计算机系杨厚群 All rights lefts reserved
©2006 计算机系 杨厚群 All rights & lefts reserved. 创建并运行三个线程: – 第一个线程打印100次字母a – 第二个线程打印100次字母b – 第三个线程打印整数1到100 TestThread 范例:使用Thread类创建并运行线程
实现Runnable接口创建线程 /Custom thread class /client class public class CustomThread public class client implements Runnable public someMethod ( public CustomThread(.) { /Create an instance of CustomThread CustomThread customThread new CustomThread(.); /Implement the run method in Runnable public void run() //Create a thread Thread thread new Thread(customThread); /Tell system how to run custom thread /Start a thread thread.start(); ©2006计算机系杨群 All rights lefts reserved
©2006 计算机系 杨厚群 All rights & lefts reserved. 实现Runnable接口创建线程 // Custom thread class public class CustomThread implements Runnable { . public CustomThread(.) { . } // Implement the run method in Runnable public void run() { // Tell system how to run custom thread . } . } // Client class public class Client { . public someMethod() { . // Create an instance of CustomThread CustomThread customThread = new CustomThread(.); // Create a thread Thread thread = new Thread(customThread); // Start a thread thread.start(); . } . }
范例:使用Runnable接口创建并运行线程 创建并运行三个线程: -第一个线程打印100次字母a -第二个线程打印100次字母b -第三个线程打印整数1到100 TestRunnable ©2006计算机系杨厚群 All rights lefts reserved
©2006 计算机系 杨厚群 All rights & lefts reserved. 范例:使用Runnable接口创建并运行线程 创建并运行三个线程: –第一个线程打印100次字母a –第二个线程打印100次字母b –第三个线程打印整数1到100 TestRunnable
控制线程和线程状态 void run() Java运行系统调用该方法执行线程。用户必须 覆盖该方法并且提供线程执行的代码 void start() 启动线程,引起对run0方法的调用。客户类中 的可运行对象调用方法 static void sleep(long millis) throws InterruptedException 将可运行对象置于休眠状态,休眠时间为指定的 毫秒 ©2006计算机系杨厚群 All rights&lefts reserved
©2006 计算机系 杨厚群 All rights & lefts reserved. 控制线程和线程状态 void run() Java运行系统调用该方法执行线程。用户必须 覆盖该方法并且提供线程执行的代码 void start() 启动线程,引起对run()方法的调用。客户类中 的可运行对象调用方法 static void sleep(long millis) throws InterruptedException 将可运行对象置于休眠状态,休眠时间为指定的 毫秒
控制线程和线程状态(cont.) void stop(O(Java2不推荐) 停止线程 void suspend()(Java2不推荐) 挂起线程。使用resume0)方法唤醒线程 void resume()(Java2不推荐) 唤醒线程。使用suspend()挂起线程 ©2006计算机系杨厚群 All rights lefts reserved
©2006 计算机系 杨厚群 All rights & lefts reserved. 控制线程和线程状态(cont.) void stop() (Java2不推荐) 停止线程 void suspend() (Java2不推荐) 挂起线程。使用 resume() 方法唤醒线程 void resume() (Java2不推荐) 唤醒线程。使用 suspend()挂起线程
线程优先级 每个线程都有一个默认的优先级:NORM PRIORITY。 可以通过setPriority(int priority)方法设置 优先级 线程类的常量有:Thread.MIN_PRIORITY、 Thread.MAX PRIORITY,Thread.NORM PRIORITY ©2006计算机系杨厚群 All rights lefts reserved
©2006 计算机系 杨厚群 All rights & lefts reserved. 线程优先级 每个线程都有一个默认的优先级:NORM_PRIORITY。 可以通过setPriority(int priority)方法设置 优先级 线程类的常量有:Thread.MIN_PRIORITY、 Thread.MAX_PRIORITY、Thread.NORM_PRIORITY
线程状态 resume. notify,或 创建线程 就绪 stop notifyAll 结束 start 新建 调用yield,.或 调用stop run 用完时间片 或完成 stop 运行 阻塞 suspend, sleep,.或wait ©2006计算机系杨厚群 All rights lefts reserved
©2006 计算机系 杨厚群 All rights & lefts reserved. 线程状态 创建线程 新建 就绪 运行 结束 阻塞 start run 调用 yield, 或 用完时间片 调用 stop 或完成 stop suspend, sleep,或 wait stop resume, notify, 或 notifyAll