第7章线程.ppt

上传人:本田雅阁 文档编号:3132091 上传时间:2019-07-15 格式:PPT 页数:27 大小:311.52KB
返回 下载 相关 举报
第7章线程.ppt_第1页
第1页 / 共27页
第7章线程.ppt_第2页
第2页 / 共27页
第7章线程.ppt_第3页
第3页 / 共27页
第7章线程.ppt_第4页
第4页 / 共27页
第7章线程.ppt_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《第7章线程.ppt》由会员分享,可在线阅读,更多相关《第7章线程.ppt(27页珍藏版)》请在三一文库上搜索。

1、第 7 章 线程,雷擎 对外经济贸易大学信息学院,content,7.1 多线程基础 7.2 线程的生命周期 7.3 生产者与消费者问题 实验:多线程,7.1 多线程基础,7.1.1 线程的概念 7.1.2 Thread类和Runnable接口 7.1.3 在程序中实现多线程,7.1.1 线程的概念,线程和进程都是指正在执行的程序代码,是与计算机中的并发执行相关的概念。 通过操作系统的调度,多个进程和线程可以同时、独立的执行。,线程与进程的区别: 多个进程的内部数据和状态都是完全独立的,而多线程是共享一块内存空间和一组系统资源,有可能互相影响. 线程本身的数据通常只有寄存器数据,以及一个程序

2、执行时使用的堆栈,所以线程的切换比进程切换的负担要小。 多线程是Java的内嵌特性,Java 虚拟机允许应用程序并发地运行多个执行线程。,线程与进程的区别,7.1.2 Thread类和Runnable接,Java中实现多线程有两种途径:继承Thread类或者实现Runnable接口。Thread类实现Runnable接口。,创建线程的方式,1. 继承类Thread public class mythread extends Thread 2.实现Runnable接口 public class mythread extends SuperClass implements Runnable 上述两

3、种方法中都可用类Thread产生线程的对象 Thread newthread;,定义一个Thread类的子类,步骤: 1. 定义一个Thread类的子类,并override run()方法,在这个方法里是你希望这个线程运行的代码 2. 创建一个这个新类的对象 3. 调用Thread对象的start()方法来启动线程,实现Runnable接口,步骤: 1. 定义一个类,实现Runnalbe接口,并override run()方法,在这个方法里是你希望这个线程运行的代码 2. 创建一个这个新类的对象 3. 创建一个Thread类的对象,用刚才的Runnable对象作为构造函数参数 4. 调用Thr

4、ead对象的start()方法来启动线程,7.1.3 在程序中实现多线程,一个龟兔赛跑的例子,使用线程模拟了龟兔在1000米赛跑过程。,1.定义一个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

5、sleepTime = rand.nextInt(2000); System.out.println(name +“跑了“+ distance + “米t休息“ + sleepTime + “毫秒“); try Thread.sleep(sleepTime); catch (InterruptedException inte) System.out.println(name+“跑到了终点“); ,使用定义好的Runner线程,import java.util.Random; public class DemoThreadSimple public static void main(String

6、 args) / 创建并命名每个线程 Runner rabbit = new Runner(“rabbit“); Runner tortoise = new Runner(“tortoise”); rabbit.setPriority(Thread.NORM_PRIORITY); tortoise.setPriority(Thread.NORM_PRIORITY+5); rabbit.start();/ 启动线程1 tortoise.start();/ 启动线程1 ,2.实现Runnable接口,class JumpBean implements Runnable private int sl

7、eepTime; public JumpBean()/构造方法 sleepTime = (int) (Math.random() * 6000);/获得随机休息毫秒数 ,public void run() try System.out.println(Thread.currentThread().getName()+ “ going to sleep for “ + sleepTime); /区别: 因为不是继承Thread类,因而必须先调用currentThread方法 Thread.sleep(sleepTime); /线程休眠 catch (InterruptedException ex

8、ception) System.out.println(Thread.currentThread().getName() + “ finished“); / 运行结束,给出提示信息 ,构造并发执行的线程,public class DemoRunnableSimple public static void main(String args) /创建3个实现Runnable接口类的对象 JumpBean thread1 = new JumpBean(); JumpBean thread2 = new JumpBean(); JumpBean thread3 = new JumpBean(); Sy

9、stem.out.println(“Starting threads“); /分别以三个对象为参数创建三个新线程,第二个参数为新线程命名并启动之 new Thread(thread1, “jumpbeanOne“).start(); new Thread(thread2, “jumpbeanTwo“).start(); new Thread(thread3, “jumpbeanThree“).start(); System.out.println(“Threads started, main endsn“); ,3. 线程的优先权,Java的线程调度的优先级为1-10的整数,优先级随数的大小增

10、减。Thread类设置了特定的级别: MIN-PRIORITY NOM_PRIORITY MAX-PRIORITY 某一时刻只有一个线程在执行,调度策略为固定优先级调度. newthread.setPriority(Thread.MIN_PRIORITY),7.2 线程的生命周期,线程的生命周期是线程从产生到终止的全过程,一个线程在任何时刻都处于某种线程状态。 一个线程的生命周期由线程类、新线程(New Thread)、就绪状态(Ready)、运行状态(Running)、阻塞状态(Blocked)、等待状态(Waiting)和定时等待状态(Timed Waiting)和终止状态(Termina

11、ted)。,7.3 生产者与消费者问题,生产者与消费者问题是从操作系统中的许多实际同步问题中抽象出来的具有代表性的问题,反映了操作系统中典型的同步例子。 生产者生产消息,放入消息缓冲区;消费者从消息缓冲区中获取消息,使用消息。,同步关系,生产者线程与消费者线程之间存在的同步关系如下: 同一时刻只能有一个生产者或者一个消费者访问消息缓冲区。 当消息缓冲区为空时,消费者等待生产者生产消息;当消息缓冲区满时,生产者等待消费者消费消息。,关键问题,生产者与消费者问题实现中的关键问题有: 缓冲区采用数组实现的循环队列:缓冲区空的条件为rear=front,缓冲区为满的条件为(rear + 1) % si

12、ze = front; 随机数对象Random rand = new Random()用于产生线程等待的随机毫秒数; 线程的退出:处于运行状态的线程通过置toStop标志为true使线程从run()方法返回;处于等待状态的线程由于无法自己醒过来,需要置toStop标志为true,主程序唤醒它们之后才能检测到toStop标志。,小结,7.1 多线程基础 7.2 线程的生命周期 7.3 生产者与消费者问题,知识点提示:,理解 线程的概念 线程和进程的区别 Java多线程实现的机制 消费者和生产者的原理 掌握 利用Thread和Runnable实现多线程程序,实验:多线程,实验11:多线程,End of Chapter 7,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1