Java语言程序设计第8章课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《Java语言程序设计第8章课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 语言程序设计 课件
- 资源描述:
-
1、第第8章章 线程线程郑郑 莉莉JAVA语言程序设计1本讲内容本讲内容l线程基础线程基础 线程的概念 Thread类 Runnable接口 资源共享和线程同步 线程间的通信l线程的生命周期线程的生命周期l线程的优先级线程的优先级l程序举例程序举例2线程的概念线程的概念l进程:程序的一次执行进程:程序的一次执行l线程:一个进程中的多个控制流线程:一个进程中的多个控制流l通过多线程,一个进程表面上看同时可以通过多线程,一个进程表面上看同时可以执行一个以上的任务执行一个以上的任务并发并发l多数程序设计语言不支持并发,支持多线多数程序设计语言不支持并发,支持多线程要借助于操作系统程要借助于操作系统“原语
2、(原语(primitives)”lJava是第一个支持内置线程操作的主流编是第一个支持内置线程操作的主流编程语言程语言线 程 基 础3Thread类简介类简介l线程类需要继承线程类需要继承Thread类类lThread 的构造函数的构造函数public Thread(String threadName)public Thread()l在线程的在线程的run方法中编写线程的主要任务方法中编写线程的主要任务lsleep 方法使线程休眠方法使线程休眠linterrupt 方法中断一个运行中的线程方法中断一个运行中的线程 lisAlive方法检查线程的状态方法检查线程的状态lsetName方法设置线程
3、名方法设置线程名ljoin方法等待线程结束,以执行当前线程方法等待线程结束,以执行当前线程线 程 基 础4例例8_1 在新线程中计算整数的阶乘在新线程中计算整数的阶乘public class Ex8_1 public static void main(String args)System.out.println(main thread starts);FactorialThread thread=new FactorialThread(10);thread.start();System.out.println(new thread started,main thread ends );/end
4、 main 线 程 基 础5/class FactorialThread controls thread executionclass FactorialThread extends Thread private int num;public FactorialThread(int num)this.num=num;public void run()int i=num;int result=1;while(i0)result=result*i;i=i-1;System.out.println(The factorial of+num+is+result);System.out.println(
5、new thread ends);6运行结果如下:运行结果如下:main thread startsnew thread started,main thread endsThe factorial of 10 is 3628800new thread ends7例例8_2 创建创建3个新线程,每个线程个新线程,每个线程睡眠任意睡眠任意0-6秒钟,然后结束。秒钟,然后结束。public class Ex8_2 public static void main(String args)/创建并命名每个线程创建并命名每个线程 TestThread thread1=new TestThread(thre
6、ad1);TestThread thread2=new TestThread(thread2);TestThread thread3=new TestThread(thread3);System.out.println(Starting threads);thread1.start();/启动线程启动线程1 thread2.start();/启动线程启动线程2 thread3.start();/启动线程启动线程3 System.out.println(Threads started,main endsn);线 程 基 础8class TestThread extends Thread priv
7、ate int sleepTime;public TestThread(String name)/构造函数构造函数 super(name);/调用基类构造函数为线程命名调用基类构造函数为线程命名 /获得随机休息毫秒数获得随机休息毫秒数 sleepTime=(int)(Math.random()*6000);public void run()/线程启动并开始运行后要执行的方法线程启动并开始运行后要执行的方法 try System.out.println(getName()+going to sleep for +sleepTime);Thread.sleep(sleepTime);/线程休眠线程
8、休眠 catch(InterruptedException exception);/运行结束,给出提示信息运行结束,给出提示信息 System.out.println(getName()+finished);9运行结果为:运行结果为:Starting threadsThreads started,main endsthread1 going to sleep for 3519thread2 going to sleep for 1689thread3 going to sleep for 5565thread2 finishedthread1 finishedthread3 finished1
9、0Runnable接口接口l如果希望一个已经有基类的类支持多如果希望一个已经有基类的类支持多线程,则不能再继承线程,则不能再继承Thread类了类了(Java不支持多继承)不支持多继承)解决方法:使类实现Runnable接口,再与Thread类结合 使用一个内部类提供Runnable的实现代码,将内部类的对象与Thread结合l相对于相对于Thread类,它更适合于多个线类,它更适合于多个线程处理同一资源程处理同一资源线 程 基 础11例例8_3 使用使用Runnable接口接口实现例实现例8_1功能功能public class Ex8_1 public static void main(St
10、ring args)System.out.println(main thread starts);FactorialThread t=new FactorialThread(10);new Thread(t).start();System.out.println(new thread started,main thread ends );/end main 线 程 基 础12/class FactorialThread controls thread executionclass FactorialThread implements Runnable private int num;publi
11、c FactorialThread(int num)this.num=num;public void run()int i=num;int result=1;while(i0)result=result*i;i=i-1;System.out.println(The factorial of+num+is+result);System.out.println(new thread ends);13例例8_4 使用使用Runnable接口实现接口实现例例8_2功能功能public class Ex8_4 public static void main(String args)/创建创建3个实现个实
12、现Runnable接口类的对象接口类的对象 TestThread thread1=new TestThread();TestThread thread2=new TestThread();TestThread thread3=new TestThread();System.out.println(Starting threads);/分别以三个对象为参数创建三个新线程,分别以三个对象为参数创建三个新线程,/第二个参数为新线程命名并启动之第二个参数为新线程命名并启动之 new Thread(thread1,Thread1).start();new Thread(thread2,Thread2).
13、start();new Thread(thread3,Thread3).start();System.out.println(Threads started,main endsn);线 程 基 础14class TestThread implements Runnable private int sleepTime;public TestThread()/构造方法构造方法 /获得随机休息毫秒数获得随机休息毫秒数 sleepTime=(int)(Math.random()*6000);public void run()/线程启动并开始运行后要执行的方法线程启动并开始运行后要执行的方法 try S
14、ystem.out.println(Thread.currentThread().getName()+going to sleep for +sleepTime);Thread.sleep(sleepTime);/线程休眠线程休眠 catch(InterruptedException exception);/运行结束,给出提示信息运行结束,给出提示信息 System.out.println(Thread.currentThread().getName()+finished);15运行结果如下:运行结果如下:Starting threadsThread1 going to sleep for 1
15、487Thread2 going to sleep for 1133Threads started,main endsThread3 going to sleep for 2328Thread2 finishedThread1 finishedThread3 finished16资源共享和线程同步资源共享和线程同步l独立的同时运行的线程有时需要共享一些数据并且考独立的同时运行的线程有时需要共享一些数据并且考虑到彼此的状态和动作。虑到彼此的状态和动作。例如生产/消费问题:生产线程产生数据流,然后这些数据流再被消费线程消费。具体来说,假设一个Java应用程序,其中有一个线程负责往文件写数据,另一个
16、线程从同一个文件中往出都数据,因为涉及到同一个资源,这里是同一个文件,这两个线程必须保证某种方式的同步。l当多个线程的执行代码来自同一个类的实例(若干个)当多个线程的执行代码来自同一个类的实例(若干个)时,即称它们共享相同的代码,当共享访问相同的对时,即称它们共享相同的代码,当共享访问相同的对象时,即它们共享相同的数据。象时,即它们共享相同的数据。使用Runnable接口可以轻松实现多个线程共享相同数据,只要用同一个实现了Runnable接口的实例作为参数创建多个线程就可以了。线 程 基 础17例例8_5 修改例修改例8_4/只用一个只用一个Runnable类型的对象为参数创建类型的对象为参数
17、创建3个新线程。个新线程。public class Ex8_5 public static void main(String args)/只创建只创建1个实现个实现Runnable接口类的对象接口类的对象 TestThread thread=new TestThread();System.out.println(Starting threads);/只用一个只用一个Runnable类型对象为参数创建三个新线程,类型对象为参数创建三个新线程,/命名并启动之命名并启动之 new Thread(thread,Thread1).start();new Thread(thread,Thread2).st
18、art();new Thread(thread,Thread3).start();System.out.println(Threads started,main endsn);线 程 基 础18class TestThread implements Runnable private int sleepTime;public TestThread()/构造函数构造函数 /获得随机休息毫秒数获得随机休息毫秒数 sleepTime=(int)(Math.random()*6000);public void run()/线程启动并开始运行后要执行的方法线程启动并开始运行后要执行的方法 try Syst
19、em.out.println(Thread.currentThread().getName()+going to sleep for +sleepTime);Thread.sleep(sleepTime);/线程休眠线程休眠 catch(InterruptedException exception);/运行结束,给出提示信息运行结束,给出提示信息 System.out.println(Thread.currentThread().getName()+finished);19Starting threadsThread1 going to sleep for 966Thread2 going t
展开阅读全文