预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共29页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

JAVA编程高级 ——多线程编程 3Sept.2008 ©NeusoftConfidential 本章内容 节知识点掌握程度难易程度 多线程简介进程/线程区别掌握 继承掌握 多线程实现的两种方式接口掌握 两种实现方式比较掌握 线程状态及其生命周期掌握 线程类中的主要方法掌握 线程的属性和控制线程优先级掌握 线程休眠和线程中断掌握 线程的高级操作掌握 线程同步掌握难 多线程的同步/通信问题锁掌握难 死锁理解 多线程简介 •基本概念 线程一个程序内部 的顺序控制流 进程计算机在执行的程序 的实体 e.g.一个.class文件 一个.exe文件一个进程中可以包含 ……一个或多个线程,一个 线程就是一个程序内部 的一条执行线索 进程/线程区别 •进程和线程的区 别 每个进程都有独立的代码和数据空间,进程的切换 会有很大的开销 同一类线程共享代码和数据空间,每个线程有独立 运行的栈和程序计数器,线程切换的开销小 •多进程和多线程示例HostAParty.java 多进程:在操作系统中能同时运行多个任务(程序) 多线程:在同一应用程序中有多个顺序流同时执行 多线程实现的两种方式 •多线程的实现 (1)创建线程类 继承Thread类或 实现Runnable接口 (2)通过Thread类构造器来创建线程对象 Thread() Thread(Runnabletarget) (3)通过start()方法激活线程对象 线程运行 多线程实现的两种方式 •创建线程的两种方式—线程类 继承Thread类——java.lang.Thread 实现Runnable接口——java.lang.Runnable •run()方法—线程运行体 要将一段代码(线程体)在一个新的线程上运行,该代码应该在一 个线程类的run()函数中 写一个类implementsRunnable接口,且必须覆盖Runnable接口中 的run()方法 写一个类extendsThread类,且必须重写Thread类的run()方法 继承Thread类实现线程类 •继承Thread类 线程调用 线程类 定义线程类继承 Thread类 覆盖run()方法 publicvoidrun() TestThread.java ThreadDemo.java 继承Thread类实现线程类 •run()与start() TestThread.java 实现Runnable接口实现线程类 •实现Runnable接口 线程调用 线程类 定义线程类实现 Runnable接口 线程共享同样 的数据和代码 覆盖Runnable接 口中的唯一的方法 publicvoidrun()TestRunnable.java RunnableDemo.java 两种实现方式的比较 •两种方式的比较 使用Runnable接口可以避免由于JAVA的单继承性带来的局限 适合多个相同的程序代码的线程去处理同一资源情况,把线程同 程序的代码、数据有效的分离 推荐使用实现Runnable接口 示例 TicketRunnable.javaTicketThread.java TestTicket.java 线程状态及其生命周期 •线程的状态及其生命周期 一个Thread对象在它的整个生存期中能以几种不同的状态存在 start()—方法使线程处于可以运行的状态,但 不一定意味着该线程立即开始运行 线程状态及其生命周期 •包含等待的线程状态 线程类中的主要方法 •线程中的主要方法 线程的优先级 •线程的优先级 Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有 线程,线程调度器按照线程的优先级来决定应调度哪个线程来执行 Java线程的优先级用1~10的整数来表示,越小则优先级越低 但是Java的优先级是高度依赖于操作系统的实现的 •Thread类的三个常量,表示常用的线程优先级: Thread.MIN_PRIORITY//1示例 Thread.NORM_PRIORITY//5 T1.javaT2.java Thread.MAX_PRIORITY//10 缺省时线程具有NORM_PRIORITY TestPriority.java •线程优先级方法 getPriority()——确定线程的优先级 setPriority()——设置线程的优先级 线程的休眠 •线程的休眠 •让线程中止一段时间的静态方法 sleep()•Thread.sleep(longmillis)—暂时停止执行millis毫秒 •在睡眠期满的瞬间,再次调用该线程不一定会恢复它的执行