欢迎来到天天文库
浏览记录
ID:57057948
大小:170.50 KB
页数:42页
时间:2020-07-30
《java课件第13章多线程.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第13章多线程主要内容13.1Java线程的运行机制13.2线程的创建和启动13.3线程的状态转换13.4线程调度13.5获得当前线程对象的引用13.6后台线程13.8线程的同步13.9线程通信线程的概念进程是指运行中的应用程序,每一个进程都有自己独立的内存空间。一个应用程序可以同时启动多个进程。线程是指进程中的一个执行流程,有时也称为执行情景。一个进程可以由多个线程组成,即在一个进程中可以同时运行多个不同的线程,它们分别执行不同的任务。当进程内的多个线程同时运行时,这种运行方式称为并发运行。区别:每个进程都需要操作系统为其分配独立的内存地址空间
2、,同一进程中的所有线程在同一块地址空间中工作,这些线程可以共享同一块内存和系统资源。13.1Java线程的运行机制在Java虚拟机进程中,执行程序代码的任务是由线程来完成的。每个线程都有一个独立的程序计数器和方法调用栈。例程13-1publicclassSample{privateinta;//实例变量publicintmethod(){intb=0;//局部变量a++;b=a;returnb;}publicstaticvoidmain(Stringargs[]){Samples=null;//局部变量inta=0;//局部变量s=newSamp
3、le();a=s.method();System.out.println(a);}}主线程每当用java命令启动一个Java虚拟机进程时,Java虚拟机都会创建一个主线程,该线程从程序入口main()方法开始执行。13.2线程的创建和启动用户可以创建自己的线程,它将和主线程并发运行。创建线程的两种方式:扩展java.lang.Thread类实现Runnable接口13.2.1扩展java.lang.Thread类Thread类代表线程类,它的最主要的两个方法是:run()——包含线程运行时所执行的代码。start()——用于启动线程。用户的线程只
4、需要继承Thread类,覆盖Thread类的run()方法即可。例程13-2线程的运行过程及Thread类的start()方法的用法主线程与用户自定义的线程并发运行例程13-3多个线程共享同一个对象的实例变量例程13-4线程的运行过程及Thread类的start()方法的用法(续)不要随便覆盖Thread类的start()方法例程13-5、例程13-6一个线程只能被启动一次13.2.2实现Runnable接口Java不支持多继承。一旦一个类继承了Thread类,就不能再继承其他的类。Java提供了java.lang.Runnable接口,它有一个
5、run()方法。publicvoidrun();Thread(Runnabletarget)构造方法创建的线程将调用那个实现了Runnable接口的类对象中的run()方法作为其运行代码,而不再调用Thread类中的run()方法了。例程13-713.3线程的状态转换线程在它的生命周期中会处于各种不同的状态。wait()yield新建状态(New):用new语句创建的线程处于新建状态,此时它和其他对象一样,仅仅在堆中被分配了内存。就绪状态(Runnable):当一个线程对象创建后,其他线程调用它的start()方法,该线程就进入就绪状态,Java
6、虚拟机会为它创建方法调用栈和程序计数器。处于这个状态的线程位于可运行池中,等待获得CPU的使用权。运行状态(Running):处于这个状态的线程占用CPU,执行程序代码。只有处于就绪状态的线程才有机会转到运行状态。阻塞状态(Blocked):是指线程因为某些原因放弃CPU,暂时停止运行。当线程处于阻塞状态时,Java虚拟机不会给线程分配CPU,直到线程重新进入就绪状态,它才有机会转到运行状态。阻塞状态可分为以下3种:位于对象等待池中的阻塞状态(Blockedinobject’swaitpool):wait()位于对象锁池中的阻塞状态(Blocke
7、dinobject’slockpool):同步锁其他阻塞状态(OtherwiseBlocked):sleep()、join()、I/O请求例程13-8死亡状态(Dead):当线程退出run()方法时,就进入死亡状态,该线程结束生命周期。例程13-913.4线程调度线程的调度是指按照特定的机制为多个线程分配CPU的使用权。两种调度模型:分时调度模型是指让所有线程轮流获得CPU的使用权,并且平均分配每个线程占用CPU的时间片。Java虚拟机采用抢占式调度模型,是指优先让可运行池中优先级高的线程占用CPU,如果可运行池中线程的优先级相同,那么就随机选择
8、一个线程,使其占用CPU。处于运行状态的线程会一直运行,直至它不得不放弃CPU。一个线程会因为以下原因而放弃CPU:Java虚拟机让当前
此文档下载收益归作者所有