最新Java与面向对象程序设计实验教程第7章 线程(共30张PPT课件).pptx
-
资源ID:23854720
资源大小:294.40KB
全文页数:30页
- 资源格式: PPTX
下载积分:20金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
最新Java与面向对象程序设计实验教程第7章 线程(共30张PPT课件).pptx
面向对象的程序设计第第 7 章章 线程线程 对外经济贸易大学信息对外经济贸易大学信息(xnx)学院学院第一页,共三十页。面向对象的程序设计对外经济贸易大学 雷擎content7.1 多线程基础多线程基础(jch)7.2 线程的生命周期线程的生命周期7.3 生产者与消费者问题生产者与消费者问题实验:多线程实验:多线程第二页,共三十页。面向对象的程序设计对外经济贸易大学 雷擎7.1 多线程基础多线程基础(jch)o 7.1.1 线程的概念线程的概念o 7.1.2 Thread类和类和Runnable接口接口o 7.1.3 在程序在程序(chngx)中实现多线程中实现多线程第三页,共三十页。面向对象的程序设计对外经济贸易大学 雷擎7.1.1 线程的概念线程的概念(ginin)o 线程和进程都是指正在执行的程序代码,是线程和进程都是指正在执行的程序代码,是与计算机中的并发与计算机中的并发(bngf)执行相关的概念。执行相关的概念。o 通过操作系统的调度,多个进程和线程可以通过操作系统的调度,多个进程和线程可以同时、独立的执行。同时、独立的执行。第四页,共三十页。面向对象的程序设计对外经济贸易大学 雷擎o 线程与进程的区别线程与进程的区别:n 多个进程的内部数据和状态都是完全独立的多个进程的内部数据和状态都是完全独立的,而而多线程是共享一块内存空间和一组系统资源多线程是共享一块内存空间和一组系统资源,有有可能互相影响可能互相影响(yngxing).n 线程本身的数据通常只有寄存器数据,以及一线程本身的数据通常只有寄存器数据,以及一个程序执行时使用的堆栈,所以线程的切换比个程序执行时使用的堆栈,所以线程的切换比进程切换的负担要小。进程切换的负担要小。o 多线程是多线程是Java的内嵌特性,的内嵌特性,Java 虚拟机虚拟机允许应用程序并发地运行多个执行线程。允许应用程序并发地运行多个执行线程。线程线程与进程与进程(jnchng)的区别的区别第五页,共三十页。面向对象的程序设计对外经济贸易大学 雷擎7.1.2 Thread类和类和Runnable接接o Java中实现中实现(shxin)多线程有两种途径:继承多线程有两种途径:继承Thread类或者实现类或者实现Runnable接口。接口。Thread类类实现实现Runnable接口。接口。第六页,共三十页。面向对象的程序设计对外经济贸易大学 雷擎创建创建(chungjin)线程的方式线程的方式1. 继承类继承类Thread public class mythread extends Thread 2.实现实现Runnable接口接口 public class mythread extends SuperClass implements Runnable 上述两种方法上述两种方法(fngf)中都可用类中都可用类Thread产生线程的对产生线程的对象象 Thread newthread;第七页,共三十页。面向对象的程序设计对外经济贸易大学 雷擎定义定义(dngy)一个一个Thread类的子类类的子类o 步骤:步骤:n 1. 定义定义一个一个(y )Thread类的子类,类的子类,并并override run()方法,在这个方法里是你希方法,在这个方法里是你希望这个线程运行的代码望这个线程运行的代码n 2. 创建一个这个新类的对象创建一个这个新类的对象n 3. 调用调用Thread对象的对象的start()方法来启动线方法来启动线程程第八页,共三十页。面向对象的程序设计对外经济贸易大学 雷擎实现实现(shxin)Runnable接口接口o 步骤:步骤:n 1. 定义一个类,实现定义一个类,实现Runnalbe接口,并接口,并override run()方法,在这个方法里是你希方法,在这个方法里是你希望这个线程运行望这个线程运行(ynxng)的代码的代码n 2. 创建一个这个新类的对象创建一个这个新类的对象n 3. 创建一个创建一个Thread类的对象,用刚才的类的对象,用刚才的Runnable对象作为构造函数参数对象作为构造函数参数n 4. 调用调用Thread对象的对象的start()方法来启动线方法来启动线程程第九页,共三十页。面向对象的程序设计对外经济贸易大学 雷擎7.1.3 在程序在程序(chngx)中实现多线程中实现多线程o 一个龟兔赛跑的例子,使用一个龟兔赛跑的例子,使用(shyng)线程模拟线程模拟了龟兔在了龟兔在1000米赛跑过程。米赛跑过程。第十页,共三十页。面向对象的程序设计对外经济贸易大学 雷擎1.定义定义(dngy)一个一个Thread类的子类类的子类class Runner extends Thread String name;double distance;Random rand = new Random();public Runner(String name)this.name = name; 第十一页,共三十页。面向对象的程序设计对外经济贸易大学 雷擎public void run() distance = 0.0;for (int i = 0; i 10; i+) distance += 100.0;int sleepTime = rand.nextInt(2000);System.out.println(name +跑了跑了+ distance + 米米t休息休息(xi xi) + sleepTime + 毫秒毫秒);try Thread.sleep(sleepTime); catch (InterruptedException inte) System.out.println(name+跑到了终点跑到了终点);第十二页,共三十页。面向对象的程序设计对外经济贸易大学 雷擎使用使用(shyng)定义好的定义好的Runner线程线程import java.util.Random; public class DemoThreadSimple public static void main(String args) /创建创建(chungjin)并命名每个线程并命名每个线程Runner rabbit = new Runner(rabbit);Runner tortoise = new Runner(“tortoise”);rabbit.setPriority(Thread.NORM_PRIORITY);tortoise.setPriority(Thread.NORM_PRIORITY+5);rabbit.start();/ 启动线程启动线程1tortoise.start();/ 启动线程启动线程1第十三页,共三十页。面向对象的程序设计对外经济贸易大学 雷擎2.实现实现(shxin)Runnable接口接口class JumpBean implements Runnable private int sleepTime; public JumpBean()/构造方法构造方法sleepTime = (int) (Math.random() * 6000);/获得获得(hud)随机休息毫秒数随机休息毫秒数 第十四页,共三十页。面向对象的程序设计对外经济贸易大学 雷擎数组元素数组元素(yun s)初始化的例子初始化的例子int aI; aI=new int10;String aS; aS=new String3;Circle aC; aC=new Circle5;int k =0 ;for(k=0;k10;k+) aIk = k*k;aS0 = aaa;aS1 = new String(bbb);aS3 = new String(ccc);for(k=0;k5;k+) aCk = new Circle();第十五页,共三十页。面向对象的程序设计对外经济贸易大学 雷擎public void run()try System.out.println(Thread.currentThread().getName()+ going to sleep for + sleepTime);/区别区别: 因为不是因为不是(b shi)继承继承Thread类,因而必须先调用类,因而必须先调用currentThread方法方法Thread.sleep(sleepTime); /线程休眠线程休眠 catch (InterruptedException exception) System.out.println(Thread.currentThread().getName() + finished);/运行结束,给出提示信息运行结束,给出提示信息 第十六页,共三十页。面向对象的程序设计对外经济贸易大学 雷擎构造并发构造并发(bngf)执行的线程执行的线程 public class DemoRunnableSimple public static void main(String args) /创建创建3个实现个实现Runnable接口类的对象接口类的对象JumpBean thread1 = new JumpBean();JumpBean thread2 = new JumpBean();JumpBean thread3 = new JumpBean(); System.out.println(Starting threads);/分别以三个对象为参数创建三个新线程,第二个参数为新线程命名分别以三个对象为参数创建三个新线程,第二个参数为新线程命名(mng mng)并启动之并启动之 new Thread(thread1, jumpbeanOne).start();new Thread(thread2, jumpbeanTwo).start();new Thread(thread3, jumpbeanThree).start(); System.out.println(Threads started, main endsn);第十七页,共三十页。面向对象的程序设计对外经济贸易大学 雷擎public class MyArray public static void main(String args) int myArray; /声明数组声明数组 myArray=new int10; /创建数组创建数组 System.out.println(IndexttValue); for(int i=0; imyArray.length;i+) System.out.println(i+tt+myArrayi); /证明数组元素默认初始化为证明数组元素默认初始化为0 /myArray10=100; /将产生将产生(chnshng)数组越界异常数组越界异常 数组引用数组引用(ynyng)例子例子第十八页,共三十页。面向对象的程序设计对外经济贸易大学 雷擎3. 线程的优先权线程的优先权o Java的线程调度的优先级为的线程调度的优先级为1-10的整数,的整数,优先级随数的大小增减。优先级随数的大小增减。Thread类设置了类设置了特定特定(tdng)的级别:的级别:n MIN-PRIORITYn NOM_PRIORITYn MAX-PRIORITYo 某一时刻只有一个线程在执行某一时刻只有一个线程在执行,调度策略为调度策略为固定优先级调度固定优先级调度.n newthread.setPriority(Thread.MIN_PRIORITY)第十九页,共三十页。面向对象的程序设计对外经济贸易大学 雷擎7.2 线程的生命周期线程的生命周期o 线程的生命周期是线程从产生到终止的全过线程的生命周期是线程从产生到终止的全过程,一个线程在任何时刻都处于某种线程状程,一个线程在任何时刻都处于某种线程状态。态。o 一个线程的生命周期由线程类、新线程(一个线程的生命周期由线程类、新线程(New Thread)、就绪状态()、就绪状态(Ready)、)、运行状态(运行状态(Running)、阻塞状态()、阻塞状态(Blocked)、等待)、等待(dngdi)状态(状态(Waiting)和定时等待状态()和定时等待状态(Timed Waiting)和)和终止状态(终止状态(Terminated)。)。第二十页,共三十页。面向对象的程序设计对外经济贸易大学 雷擎第二十一页,共三十页。面向对象的程序设计对外经济贸易大学 雷擎7.3 生产者与消费者问题生产者与消费者问题(wnt)o 生产者与消费者问题是从操作系统中的许多生产者与消费者问题是从操作系统中的许多实际同步问题中抽象实际同步问题中抽象(chuxing)出来的具有代出来的具有代表性的问题,反映了操作系统中典型的同步表性的问题,反映了操作系统中典型的同步例子。例子。o 生产者生产消息,放入消息缓冲区;消费者生产者生产消息,放入消息缓冲区;消费者从消息缓冲区中获取消息,使用消息。从消息缓冲区中获取消息,使用消息。第二十二页,共三十页。面向对象的程序设计对外经济贸易大学 雷擎同步同步(tngb)关系关系o 生产者线程与消费者线程之间存在的同步关生产者线程与消费者线程之间存在的同步关系系(gun x)如下:如下:n 同一时刻只能有一个生产者或者一个消费者访同一时刻只能有一个生产者或者一个消费者访问消息缓冲区。问消息缓冲区。n 当消息缓冲区为空时,消费者等待生产者生产当消息缓冲区为空时,消费者等待生产者生产消息;当消息缓冲区满时,生产者等待消费者消息;当消息缓冲区满时,生产者等待消费者消费消息。消费消息。第二十三页,共三十页。面向对象的程序设计对外经济贸易大学 雷擎关键问题关键问题o 生产者与消费者问题实现中的关键问题有:生产者与消费者问题实现中的关键问题有:n 缓冲区采用数组实现的循环队列:缓冲区空的缓冲区采用数组实现的循环队列:缓冲区空的条件为条件为rear=front,缓冲区为满的条件为,缓冲区为满的条件为(rear + 1) % size = front;n 随机数对象随机数对象Random rand = new Random()用于产生线程等待的随机用于产生线程等待的随机(su j)毫秒毫秒数;数;n 线程的退出:处于运行状态的线程通过置线程的退出:处于运行状态的线程通过置toStop标志为标志为true使线程从使线程从run()方法返回方法返回;处于等待状态的线程由于无法自己醒过来,;处于等待状态的线程由于无法自己醒过来,需要置需要置toStop标志为标志为true,主程序唤醒它们,主程序唤醒它们之后才能检测到之后才能检测到toStop标志。标志。第二十四页,共三十页。面向对象的程序设计对外经济贸易大学 雷擎第二十五页,共三十页。面向对象的程序设计对外经济贸易大学 雷擎小结小结(xioji)7.1 多线程基础多线程基础(jch)7.2 线程的生命周期线程的生命周期7.3 生产者与消费者问题生产者与消费者问题第二十六页,共三十页。面向对象的程序设计对外经济贸易大学 雷擎知识点提示知识点提示(tsh):o 理解理解n 线程的概念线程的概念n 线程和进程的区别线程和进程的区别(qbi)n Java多线程实现的机制多线程实现的机制n 消费者和生产者的原理消费者和生产者的原理o 掌握掌握n 利用利用Thread和和Runnable实现多线程程序实现多线程程序第二十七页,共三十页。面向对象的程序设计对外经济贸易大学 雷擎实验实验(shyn):多线程:多线程o 实验实验(shyn)11:多线程:多线程第二十八页,共三十页。面向对象的程序设计End of Chapter 7第二十九页,共三十页。内容(nirng)总结第 7 章 线程。多线程是Java的内嵌特性,Java 虚拟机允许应用程序并发地运行多个执行线程。Java中实现多线程有两种途径:继承Thread类或者实现Runnable接口。public Runner(String name)。distance += 100.0。int k =0。public void run()。某一时刻只有一个(y )线程在执行,调度策略为固定优先级调度.。实验11:多线程第三十页,共三十页。