多线程编程技术.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:33 大小:211KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

多线程编程技术.ppt

多线程编程技术.ppt

预览

免费试读已结束,剩余 23 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

项目九多线程编程技术多线程是指在同一程序中同时运行多个程序,支持多线程是Java语言的重要特性之一。许多程序设计语言中,多线程是通过调用系统接口实现的,而Java语言可以在程序中编写线程类、创建线程对象、控制线程的行为。所谓多线程是指一个进程在执行过程中可以产生多个线程,这些线程可以同时存在、同时运行,一个进程可以包含了多个同时执行的线程。在多线程程序中,多个线程可共享一块内存区域和资源。例如,当一个线程改变了所属应用程序的变量时,则其他线程下次访问该变量时将看到这种改变。线程间可以利用共享特性来实现数据交换、实时通信等。1线程基本概念多个任务同时执行,能提高系统资源的利用率,加快程序运行的速度。多任务有两种不同的类型:基于进程的多任务和基于线程的多任务。基于进程的多任务允许计算机同时运行两个或多个程序,例如,运行Java程序的同时浏览Internet。在这种情况下,进程是调度运行的基本单位。基于线程的多任务环境中,线程是调度运行的基本单位。多线程的优势在于可以编写出非常高效的程序。程序运行中除了使用CPU外,还要使用键盘、磁盘等外部设备,还可能经过网络传送或接收数据。无论是网络端口,还是键盘、磁盘驱动器,读写数据的速度都比CPU执行速度慢得多,因此,程序经常等待接收或发送数据。在使用多线程的情况下,一个线程因为读写数据等待时,CPU可以运行另一个线程。线程在生命周期中有五种状态:新建(New)、就绪(Ready)、运行(Running)、阻塞(Blocked)、终止(Terminated)。Java程序可以控制线程在这些状态之间转换。调用线程类的构造方法创建线程后,新建的线程处于新建状态。线程调用start()方法后处于就绪状态。此时如果CPU在运行其它线程,线程必须排队等待,如果CPU空闲,线程立即占用CPU开始运行。线程获得CPU后处于运行状态。运行中的线程如果遇到读写数据、调用sleep()方法或其它阻塞事件,状态转变为阻塞状态。处于阻塞状态的线程,如果引起阻塞的事件结束,例如数据读写完毕或sleep()设定的时间已到,线程再次处于就绪状态。线程遇到异常或线程代码运行完毕,不能继续运行时,处于终止状态。62Runnable接口和Thread类Thread()Thread(Stringname)//name是线程的名字Thread(Runnabletarget)//target引用实现了Runnable接口的类的对象Thread(Runnabletarget,Stringname)publicvoidstart()//使线程变为就绪状态,占用CPU后运行run()方法voidsetName(Stringname)//设置线程名StringgetName()//获取线程名voidsetPriority(intnewPriority)//设置线程优先级intgetPriority()//获取线程优先级staticvoidsleep(longmilliseconds)throwsInterruptedException//线程睡眠milliseconds毫秒staticThreadcurrentThread()//返回正在运行的线程对象执行Java应用程序至少有一个线程,这就是执行main()方法的主线程。主线程还可以创建其它线程。创建线程对象有两个途径:继承Thread类或实现Runable接口。这两个办法都要用到Thread类,不同点在于通过不同的途径覆盖run()方法。静态方法①staticThreadcurrentThread()该方法返回当前执行线程的引用对象②staticintactiveCount()该方法返回当前线程组中活动线程个数③staticintenumerate(Thread[]tarray)该方法将当前线程组中的活动线程复制到tarray数组中,并返回线程的个数。方法3继承Thread类创建线程例9-1定义一个线程类,循环执行20次输出语句,每次迭代输出线程名和循环迭代次数。创建两个线程对象,观察这两个对象的交替运行。4实现Runnable接口创建线程例9-2创建两个线程对象,一个线程循环输出0~9之间的随机数,每行输出10个。另一个线程循环输出字母’a’~’z’,每行输出26个。5sleep()方法例9-3调用sleep()方法控制线程交替运行。classSleepThreadextendsThread{SleepThread(Strings){super(s);}publicvoidrun(){Stringname=this.getName();for(inti=1;i<=20;i++){