Java应用开发与实践-第10章Java多线程.ppt
《Java应用开发与实践-第10章Java多线程.ppt》由会员分享,可在线阅读,更多相关《Java应用开发与实践-第10章Java多线程.ppt(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、l第第10章章 Java多线程多线程Java应用开发与实践第第二二部分部分 酒店管理系统的设计酒店管理系统的设计学习目标学习目标l理解进程和线程的区别和联系理解进程和线程的区别和联系l掌握线程的创建方法掌握线程的创建方法l了解线程同步的概念了解线程同步的概念l了解线程调度的概念了解线程调度的概念n10.1 进程和线程进程和线程n10.2 线程的创建线程的创建n10.3 线程同步线程同步n10.4 线程调度线程调度n10.5 实训实训10 多线程的练习和应用多线程的练习和应用目录目录10.1 进程和线程进程和线程l进程是一个在内存中运行的应用程序。每个进程都有独立的代码和数据空间(进程上下文),
2、有它特定的进程号。他们共享系统的内存资源,进程间的切换会有较大的开销,一个进程包含若干个线程,进程是资源分配的最小单位。l线程是进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以运行多个线程,多个线程共享进程的堆和方法区资源,同时每个线程有独立的运行栈和程序计数器(PC),线程切换开销小,因此线程也被称为轻量级进程。线程是CPU调度的最小单位。l由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Java也不例外。10.1.1 认识进程和线程认识进程和线程10.1 进程和线程进程和线程1)多线程技术使程序的响应速度更快,因为
3、用户界面可以在进行其它工作的同时一直处于活动状态;2)当前没有进行处理的任务时可以将处理器时间让给其它任务;3)占用大量处理时间的任务可以定期将处理器时间让给其它任务;4)可以随时停止任务;5)可以分别设置各个任务的优先级以优化系统的性能。在以下情况下,最适合采用多线程处理:1)耗时或大量占用处理器的任务阻塞用户界面操作;2)各个任务必须等待外部资源(如远程文件或 Internet连接)。10.1.2 多线程的特点多线程的特点10.1 进程和线程进程和线程在Java中任何对象都有生命周期,线程也不例外,线程的创建即是线程的生命周期的开始,当run()方法执行完毕或者线程抛出一个未捕获的异常或者
4、错误的时候,线程死亡。因此线程从创建到死亡的过程就是一个动态执行的过程。10.1.3 线程的生命周期及五种基本状态线程的生命周期及五种基本状态10.1 进程和线程进程和线程10.1.3 线程的生命周期及五种基本状态线程的生命周期及五种基本状态10.1 进程和线程进程和线程l新建状态(new):当线程对象对创建后,即进入了新建状态,如:Thread t=new MyThread();l就绪状态(Runnable):当调用线程对象的start()方法(t.start();),线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是说执行了t.start(
5、)此线程立即就会执行;l运行状态(Running):当CPU开始调度处于就绪状态的线程时,此时线程才得以真正执行,即进入到运行状态。就绪状态是进入到运行状态的唯一入口。也就是说,线程要想进入运行状态执行,首先必须处于就绪状态中;10.1.3 线程的生命周期及五种基本状态线程的生命周期及五种基本状态10.1 进程和线程进程和线程l阻塞状态(Blocked):处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入到就绪状态,才有机会再次被CPU调用以进入到运行状态。l死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。1
6、0.1.3 线程的生命周期及五种基本状态线程的生命周期及五种基本状态10.2 线程的创建线程的创建lThread类是java.lang包下的一个常用类,每一个Thread类的对象,就代表一个处于某种状态的线程。lThread类用于操作线程,是所有涉及到线程的操作(如并发)的基础。创建线程比较常用的一种方法就是继承Thread类。l如果应用系统只需要建立一条线程,而没有什么其它特殊的要求,那么继承Thread类无疑是较好的选择。lThread类中的方法可分为实例方法和静态方法,其中实例方法有start()方法,run()方法等,静态方法有currentThread()方法,sleep(long
7、millis)方法等。10.2.1 通过继承通过继承Thread类创建线程类创建线程10.2 线程的创建线程的创建1.start()方法start()用来启动一个线程,当调用start()方法后,系统才会开启一个新的线程来执行用户定义的子任务,在这个过程中,会为相应的线程分配需要的资源。要注意,调用start方法的顺序不代表线程启动的顺序,也就是CPU执行哪个线程的代码具有不确定性。10.2.1 通过继承通过继承Thread类创建线程类创建线程10.2 线程的创建线程的创建2.run()方法这个方法是线程类调用start()后所执行的方法,如果直接调用run()而不是start()方法,那么和
8、普通方法一样没有区别。要注意,run()方法是不需要用户来调用的,当通过start()方法启动一个线程之后,当线程获得了CPU执行时间,便进入run()方法体去执行具体的任务。用start()方法来启动线程,是真正实现了多线程,通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到CPU时间片,就开始执行run()方法,无需等待run()方法执行完毕,即可继续执行下面的代码。所以说:start()方法是真正实现了多线程,run()方法只是一个普通的方法。10.2.1 通过继承通过继承Thread类创建线程类创建线程10.2 线程的创建线
9、程的创建3.interrupt()方法使用这个方法不会中断线程。实际上调用interrupt实际作用是在线程受到阻塞时抛出一个中断信号,这样线程就得以退出阻塞状态。4.join()方法join方法会使得调用join方法的线程无限阻塞,直到调用join方法的线程销毁为止,join方法内部使用的是wait(),所以会释放锁。10.2.1 通过继承通过继承Thread类创建线程类创建线程10.2 线程的创建线程的创建5.sleep(long millis)方法sleep()方法是静态方法,它的作用就是在指定的时间(单位是毫秒)让正在执行的线程休眠,不释放锁。后面小节有详述。6.yield()方法暂停
10、当前执行的线程对象,并执行其他线程。这个暂停会放弃CPU资源,放弃的时间不确定。10.2.1 通过继承通过继承Thread类创建线程类创建线程10.2 线程的创建线程的创建继承Thread类的步骤如下:1)定义类继承Thread类;2)重写Thread类中的run()方法;重写run()方法的目的是将需要该线程执行的代码存储在run()方法运行。3)调用线程的start方法。该方法有两步:启动线程,调用run()方法。10.2.1 通过继承通过继承Thread类创建线程类创建线程10.2 线程的创建线程的创建class MyThread extends Thread public void r
11、un()for(int i=0;i 10;i+)try Thread.sleep(1000);catch(InterruptedException e)e.printStackTrace();/this.getName()获取当前线程System.out.println(this.getName();10.2.1 通过继承通过继承Thread类创建线程类创建线程10.2 线程的创建线程的创建public class Demo10_1 public static void main(String args)MyThread thead1=new MyThread();MyThread thead
12、2=new MyThread();thead1.start();thead2.start();10.2.1 通过继承通过继承Thread类创建线程类创建线程10.2 线程的创建线程的创建实现Runnable接口的步骤如下:1)定义类实现Runnable接口;2)实现Runnable接口中的run()方法,将线程要运行的代码放在该run()方法中;3)通过Thread类建立线程对象;4)将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。自定义的run()方法所属的对象是Runnable接口的子类对象。5)调用Thread类的start()方法开启线程并调用Runnabl
13、e接口子类的run()方法。10.2.2 通过实现通过实现Runnable接口创建线程接口创建线程10.2 线程的创建线程的创建class MyThread implements Runnable public void run()for(int i=0;i 10;i+)try Thread.sleep(1000);catch(InterruptedException e)e.printStackTrace();/Thread.currentThread()获取当前线程System.out.println(Thread.currentThread().getName();10.2.2 通过实现
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 应用 开发 实践 10 多线程
限制150内