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

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

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

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

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

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

Date:26March2007ITEducation&Training Java语言编程 王宁 东软培训(沈阳) Date:26March2007ITEducation&Training Java的线程机制 •定义、创建、执行新线程 •结束线程的执行 •线程的优先级 •线程的状态及状态间的转换 •程序对线程执行的控制 Date:26March2007ITEducation&Training Java的线程机制 •共享访问与线程同步 •通过wait和notify在线程间交互 •Thread类的其他重要方法 •Java多线程机制的特点 •多线程与垃圾收集 Date:26March2007ITEducation&Training 简化的计算机 •最简单的看法包含三个部分: ¾CPU ¾ROM(保存程序代码) ¾RAM(保存要操作的数据) •只执行一个作业 •两个以上的作业由两个以上的计算机完成 Date:26March2007ITEducation&Training 线程 •线程可以被看作一个简化的计算机 •线程的三个组成部分: ¾虚拟CPU ¾代码 ¾数据 •线:所有的操作都具有先、后顺序 ‡每个线程内,按照时间顺序地执行代码 •不同线程之间不能确定代码的执行顺序 Date:26March2007ITEducation&Training 线程与进程 •进程:一个应用程序 •进程通常独占内存 •一个或多个线程组成一个进程 •多个线程可能共享内存: ¾代码 ¾数据 Date:26March2007ITEducation&Training 做过的程序 ‡文本程序: ¾通常都是一个线程 ¾从main方法开始 ¾代码的执行按照严格的时间顺序 ¾执行到main方法结束 ‡GUI程序: ¾图形界面在另外的线程中运行 Date:26March2007ITEducation&Training Java中的线程 ‡使用java.lang.Thread类创建和控制线程 ‡虚拟CPU被封装在java.lang.Thread类的一个实例中 ‡Thread类的实例决定了代码和数据 ‡Java中任何一个线程都必须是Thread类或其继承类的一个实例 ‡创建并启动线程:P13-6 Date:26March2007ITEducation&Training 创建线程 •使用Thread类: ¾publicThread(Runnabletarget) ¾publicvoidstart() •java.util.Runnable接口 ¾publicvoidrun() ¾线程从Runnable对象的run方法开始执行 Date:26March2007ITEducation&Training 线程的启动和终止 •开始一个新线程 •Thread类的publicvoidstart() •start方法调用后线程处于可执行状态,但并不一定立即 执行 •线程的执行由JVM调度 •线程的终止: ¾自动结束:run方法执行结束返回时 ¾强行停止:Thread类的publicvoiddestroy() Date:26March2007ITEducation&Training 多线程共享数据和代码 •举例: ¾多线程源于同一个Runnable实例 Threadt1=newThread(r); Threadt1=newThread(r); t1.start(); t2.start(); ¾共享Runnable的run方法的代码 ¾共享Runnable实例的数据 Date:26March2007ITEducation&Training 线程的状态 •线程的状态: ¾新建 ¾可运行 ¾运行 ¾阻塞 ¾中止 •线程的阻塞: ¾多种原因可导致线程阻塞 ¾Thread类的sleep方法 Date:26March2007ITEducation&Training 线程调度(线程缓冲池) •一个线程对象的start方法只能被执行一次 •线程是抢先式的:优先级 •一个时刻只有一个线程在运行 •运行到不再是可运行的,或另一个更高优先级的线程成为可运 行 •所有可运行线程按优先级保存在缓冲池中 •P13-11 Date:26March2007ITEducation&Training 线程状态间的转换P13-11 Blocking NewRunnableRunningDead Date:26March2007ITEducation&Training 线程的优先级 •1~10的整数来表示,越小则优先级越低 •Thread类的setPriority(intnewPriority)方法来设置线程的优先级: ¾例如:aThr