第2章-Java多线程应用ppt课件(全).ppt
《第2章-Java多线程应用ppt课件(全).ppt》由会员分享,可在线阅读,更多相关《第2章-Java多线程应用ppt课件(全).ppt(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第2章章 Java多线程应用多线程应用12.1 线程和多线程2.2 实例1 Java程序的多线程机制 2.3 实例2 Java程序中的多线程实现 2.4 实例3 基于Java语言的多线程同步机制2.5实例4 用Java语言实现经典的同步互斥问题 22.1 线程和多线程线程和多线程线程(thread)是指计算机正在执行的程序中的一个控制流程。线程本身不是完整程序,没有执行的入口,也没有出口,因此其自身不能自动运行,而必须栖身于某一进程之中,由进程触发执行。Thread类提供了sleep()、join()、interrupt()、currentThread()、isAlive()和stop()等
2、方法,用来控制和协调线程。下面介绍几个常用的方法。1.sleep()sleep()方法使一个线程暂停运行一段固定的时间。在休眠时间内,线程将停止运行。休眠时间的长短由sleep()方法的参数决定。public void run()/进行其他处理后Thread.sleep(200);/休眠时间以ms为单位32.join()join()方法使当前正在执行的线程进入等待状态(挂起),直至方法join()所调用的线程结束。设已经生成了一个线程zsmthread,而当前正在运行的另一线程中执行了方法outtime():public void outtime()/挂起线程,并运行线程zsmthreadzs
3、mthread.join();/继续执行本线程其余的语句这样,在执行方法outtime()之后,现行的线程被挂起,转向运行线程zsmthread,直到线程zsmthread运行结束,才继续执行本线程剩下的语句。3.同步问题在多线程应用程序中,线程是共享内存及其他资源的,但各个线程对这些数据的访问却是异步的,即当某一个线程访问共享数据时,并不知道其他线程是否也在访问这些数据。因此,有时会出现共享数据不一致的危险。这就是多线程的同步问题。在Java语言中,解决线程同步的基本思想是:避免多个线程访问同一个对象,方法是为每一个对象的实例做一个标志,这个标志称为“锁定标志”。关键字synchronize
4、d提供了操作这个标志的方法,这样,保证在任何时刻只有一个线程在访问共享数据。42.2 实例实例1 Java程序的多线程机制程序的多线程机制Java程序通过流控制来执行程序流,每个单个的流控制称为一个线程。如果一个程序中可有多个线程同时执行不同的任务,则称为多线程。多线程程序有提高系统的输入/输出速度、有效利用系统资源、改善计算机通信功能等优点。2.2.1 线程的生命周期一个线程创建之后,总处于某种状态之中,线程的状态表示了线程正在进行的活动以及在这段时间内线程能完成的任务,在线程的生命周期中有四种状态,通过对线程进行操作来改变其状态。1.创建状态创建了一个线程而还没有启动它,则处于创建状态,此
5、时仅是一个空的线程对象,并不获得应有资源,只有启动后,系统才为它分配资源。处于创建状态的线程可以进行两种操作:一是通过调用start()方法启动,使其进入可运行状态;二是调用stop()方法,使其进入消亡状态。2.可运行状态在线程的创建状态中进行启动操作,则此线程进入可运行状态。可运行状态只说明该线程具备了运行的条件,但并不一定是运行状态,因为在单处理器系统中运行多线程程序,实际上在每个“时刻”至多有一个线程在运行,而系统中可能有多个线程都处于运行状态,系统通过快速切换和调度使所有可运行的线程共享处理器,造成宏观上的多线程并发运行。在可运行状态,线程运行的是线程体,线程体由run()方法规定,
6、在自己定义的线程类中重写。在可运行状态下可进行多种操作:调用suspend()方法,使线程挂起,从而进入不可运行状态;调用sleep()方法,使线侱睡眠,从而进入不可运行状态;调用wait()方法,使线程等待,从而进入不可运行状态;调用yield()方法,使线程退让,使线程把CPU控制权提前交给同级优先权的其他线程;调用stop()方法,使线程终止,从而进入消亡状态。正常的情况下是执行完run()方法,使线程结束,进入消亡状态。53.不可运行状态不可运行状态从可运行状态转换而来,一个处于可运行状态的线程遇到下列情况进入不可运行状态:调用了suspend()方法;调用了sleep()方法;调用了
7、wait()方法;另外,如果一个线程是和I/O操作有关的,则在执行I/O指令时,由于外设速度远远低于CPU速度而使线程受到阻塞,此时也可进入不可运行状态。当线程处于不可运行状态时,可通过下面途径恢复到可运行状态:通过sleep()方法进入不可运行状态的线程,在过了指定的睡眠时间后自动恢复;由于I/O阻塞而进入不可运行状态的线程在外设完成I/O操作后自动恢复;通过suspend()方法进入不可运行状态的线程,通过调用resume()方法恢复;通过wait()方法进入不可运行状态的线程,通过调用notify()或notifyAll()方法恢复。采用等待操作往往是由于线程要等待某个条件变量,当获得此
8、条件变量后,便可调用此两方法恢复,一般用于多线程的同步机制中。在不可等待状态,也可调用stop()方法,使进入消亡状态。4.消亡状态有两种情况使线程进入消亡状态:从可运行状态执行完run()方法,自然撤消;从任何一种其他状态调用stop()方法。从消亡状态不能转换到别的状态,因为到此线程的生命周期就结束了。62.3.1 为什么会排队等待?为什么会排队等待?下面的这个简单的Java程序完成四项不相关的任务。这样的程序有单个控制线程,控制在这四个任务之间线性的移动。此外,因为所需的资源打印机、磁盘、数据库和显示屏都有内在的潜伏时间,所以每项任务都包含明显的等待时间。因此,程序在访问数据库之前必须等
9、待打印机完成打印文件的任务。如果您正在等待程序的完成,则这是对计算机资源和您的时间的一种拙劣使用。改进此程序的一种方法是使它成为多线程的。2.3 实例实例2 Java程序中的多线程实现程序中的多线程实现7Java编程语言使多线程简单有效,main()函数也是一个线程。程序员只有在需要多个线程时才需要创建新的线程。1.Thread类Thread类是一个具体的类,该类封装了线程的行为。要创建一个线程,程序员必须创建一个从Thread类导出的新类。必须覆盖Thread的run()函数来完成有用的工作。用户并有直接调用此函数;而是必须调用Thread的start()函数,该函数再调用run()的代码。
10、2.3.2 Java编程语言实现多线程编程语言实现多线程8此接口只有一个此接口只有一个run()函数,此函数必须由实现了此接口的类实现。但是,就运行这个类而论,其语义与前一个示例稍有函数,此函数必须由实现了此接口的类实现。但是,就运行这个类而论,其语义与前一个示例稍有不同。我们可以用不同。我们可以用runnable接口改写前一个示例。接口改写前一个示例。创建两个新线程而有强加类层次:创建两个新线程而有强加类层次:import java.util.*;class TimePrinter implements Runnable int pause Time;String name;public T
11、imePrinter(int x,String n)pauseTime=x;name=n;public void run()while(true)try System.out.printin(name+:+newDate(System.xurrentTimeMillis();Thread.sleep(pauseTime);catch(Exception e)System.out.println(e);static public void main(String args)Thread t1=new Thread(new TimePrinter(1000,Fast Guy);t1.start()
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 多线程 应用 ppt 课件
限制150内