预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共33页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

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

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++) {