Java多线程机制.ppt
《Java多线程机制.ppt》由会员分享,可在线阅读,更多相关《Java多线程机制.ppt(20页珍藏版)》请在三一办公上搜索。
1、第13章 Java多线程机制,本章要点:进程与线程线程的状态多线程的实现方法通过继承Thread类实现多线程通过Runnable接口实现多线程线程的调度线程的同步实现,13.1 Java中的线程,计算机的发展日新月异,个人计算机上的操作系统也纷纷采用多任务和分时设计,将早期只有大型计算机才具有的系统特性带到了个人计算机系统中。一般可以在同一时间内执行多个程序的操作系统都有进程的概念。一个进程就是一个执行中的程序,而每一个进程都有自己独立的一块内存空间、一组系统资源。在进程概念中,每一个进程的内部数据和状态都是完全独立的。Java程序通过流控制来执行程序流,程序中单个顺序的流控制称为线程,多线程
2、则指的是在单个程序中可以同时运行多个不同的线程,执行不同的任务。多线程意味着一个程序的多行语句可以看上去几乎在同一时间内同时运行。,13.1.1 进程与线程进程是程序的一次动态执行过程,它对应了从代码加载、执行至执行完毕的一个完整过程,这个过程也是进程本身从产生、发展至消亡的过程。如果把公司一天的工作比作一个进程,那么早上公司开门上班是进程的开始,晚上下班关门是进程的结束。线程是比进程更小的执行单位。一个进程在其执行过程中,可以产生多个线程,形成多条执行线索,每条线索,即每个线程也有它自身的产生、存在和消亡的过程,也是一个动态的概念。就像公司一天的工作开始后,可以有多个不同的“线程”进行运作,
3、如财务部门、开发部门、销售部门等。我们知道,每个进程都有一段专用的内存区域,与此不同的是,线程间可以共享相同的内存单元(包括代码与数据),并利用这些共享单元来实现数据交换、实时通信与必要的同步操作。比如在公司一天的工作开始后,财务部门、开发部门和销售部门这3个线程可以共享公司的内部网络资源,财务部门、销售部门可以共享公司的账目数据等。多线程的程序能更好地表达和解决现实世界的具体问题,是计算机应用开发和程序设计的一个必然发展趋势。,13.1.2 线程的状态一个线程在任何时候都处于某种线程状态。线程的几个主要状态有创建、运行、中断和死亡4 种状态。1.创建(New Thread)Java的线程是通
4、过类来实现的。当我们生成一个Thread类的对象之后,一个新的线程就产生了。执行下列语句时,线程就处于创建状态:Thread myThread=new MyThreadClass();当一个线程处于创建状态时,它仅仅是一个空的线程对象,系统不为它分配资源。,2.运行(Runnable)线程创建之后就具备了运行的条件,一旦轮到它来享用CPU 资源时,就可以脱离创建它的主线程独立开始自己的生命周期了。执行下列语句时,线程就处于运行状态:Thread myThread=new MyThreadClass();myThread.start();当一个线程处于可运行状态时,系统为这个线程分配了它所需的系
5、统资源,安排其运行并调用线程运行方法,这样就使得该线程处于可运行(Runnable)状态。需要注意的是这一状态并不是运行中状态(Running),因为线程也许实际上并未真正运行。由于很多计算机都是单处理器的,所以要在同一时刻运行所有的处于可运行状态的线程是不可能的,Java的运行系统必须实现调度来保证这些线程共享处理器。,3.中断(Not Runnable)一个正在执行的线程可能被人为地中断,使其让出CPU的使用权,暂时中止自己的执行,进入阻塞状态。阻塞时它不能进入排队队列,只有当引起阻塞的原因被消除时,线程才可以转入就绪状态,重新进到线程队列中排队等待CPU资源,以便从原来终止处开始继续运行
6、。进入中断状态的原因有如下几条:(1)调用了sleep()方法;(2)调用了suspend()方法;(3)为等候一个条件变量,线程调用wait()方法;(4)输入输出流中发生线程阻塞。4.死亡(Dead)处于死亡状态的线程不具有继续运行的能力。线程死亡的原因有两个,一个是正常运行的线程完成了它的全部工作,另一个是线程被提前强制性地终止。所谓死亡状态就是线程释放了实体,即释放分配给线程对象的内存。,线程的状态,13.1.3 多线程的实现方法在Java中,创建线程的方法有两种:一种方法是通过创建Thread类的子类来实现,另一种方法是通过实现Runnable接口的类来实现,具体如下。方法一:定义一
7、个线程类,它继承线程类Thread并重写其中的方法run(),这时在初始化这个类的实例时,目标target可为null,表示由这个实例来执行线程体。由于Java只支持单重继承,用这种方法定义的类不能再继承其他父类。方法二:提供一个实现接口Runnable的类作为一个线程的目标对象,在初始化一个Thread类或者Thread子类的线程对象时,把目标对象传递给这个线程实例,由该目标对象提供线程体run()。这时,实现接口Runnable的类仍然可以继承其他父类。,13.2 通过继承Thread类实现多线程,例13-1程序清单 TwoThreads_Test.javapublic class Two
8、Threads_Test public static void main(String args)new Thread_Test(线程1).start();/第一个线程的名字为线程1new Thread_Test(线程2).start();/第二个线程的名字为线程2class Thread_Test extends Thread public Thread_Test(String str)super(str);/调用其父类的构造方法public void run()/重写run方法for(int i=0;i 10;i+)/打印次数和线程的名字System.out.println(i+getNa
9、me();try/线程睡眠,把控制权交出去sleep(int)(Math.random()*1000);catch(InterruptedException e)/线程执行结束(执行结束!+getName();,13.3 通过Runnable接口实现多线程,通过Runnable接口实现多线程的方法是首先设计一个实现Runnable接口的类,然后根据工作需要重新设计线程的run方法;再建立该类的对象,以此对象为参数建立Thread类的对象;调用Thread类对象的start方法启动线程,将执行权转交到run方法。,例13-2程序清单 Runnable_Test.javaimport;import
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 多线程 机制
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6509740.html