level 1
新东方IT教育
楼主
线程是Java的一大特性,它可以是给定的指令序列、给定的方法中定义的变量或者一些共享数据(类一级的变量)。在Java中每个线程有自己的堆栈和程序计数器(PC),其中堆栈是用来跟踪线程的上下文(上下文是当线程执行到某处时,当前的局部变量的值),而程序计数器则用来跟踪当前线程正在执行的指令。 在通常情况下,一个线程不能访问另外一个线程的堆栈变量,而且这个线程必须处于如下状态之一: 1.排队状态(Ready),在用户创建了一个线程以后,这个线程不会立即运行。当线程中的方法start()被调用时,这个线程就会进行排队状态,等待调度程序将它转入运行状态(Running)。当一个进程被执行后它也可以进行排队状态。如果调度程序允许的话,通过调用方法yield()就可以将进程放入排队状态。 2.运行状态(Running),当调度程序将CPU的运行时间分配给一个线程,这个线程就进入了运行状态开始运行。 3.等待状态(Waiting),很多原因都可以导致线程处于等待状态,例如线程执行过程中被暂停,或者是等待I/O请求的完成而进入等待状态。 在Java中不同的线程具有不同的优先级,高优先级的线程可以安排在低优先级线程之前完成。如果多个线程具有相同的优先级,Java会在不同的线程之间切换运行。一个应用程序可以通过使用线程中的方法setPriority()来设置线程的优先级,使用方法getPriority()来获得一个线程的优先级。 线程的生命周期 一个线程的的生命周期可以分成两阶段:生存(Alive)周期和死亡(Dead)周期,其中生存周期又包括运行状态(Running)和等待状态(Waiting)。当创建一个新线程后,这个线程就进入了排队状态(Ready),当线程中的方法start()被调用时,线程就进入生存周期,这时它的方法isAlive()始终返回真值,直至线程进入死亡状态。 线程的实现 有两种方法可以实现线程,一种是扩展java.lang.Thread类,另一种是通过java.lang.Runnable接口。 Thread类封装了线程的行为。要创建一个线程,必须创建一个从Thread类扩展出的新类。由于在Thread类中方法run()没有提供任何的操作,因此,在创建线程时用户必须覆盖方法run()来完成有用的工作。当线程中的方法start()被调用时,方法run()再被调用。下面的代码就是通过扩展Thread类来实现线程: import java.awt.*;class Sample1{public static void main(String[] args){ Mythread test1=new Mythread(1); Mythread test2=new Mythread(2); test1.start(); test2.start();}}class Mythread extends Thread {int id;Mythread(int i){ id=i;}public void run() { int i=0; while(id+i==1){ try {sleep(1000); } catch(InterruptedException e) {}}System.out.println(“The id is ”+id);} 通常当用户希望一个类能运行在自己的线程中,同时也扩展其它某些类的特性时,就需要借助运行Runnable接口来实现。Runnable接口只有一个方法run()。不论什么时候创建了一个使用Runnable接口的类,都必须在类中编写run()方法来覆盖接口中的run()方法。例如下面的代码就是通过Runnable接口实现的线程: import java.awt.*;import java.applet.Applet;public class Bounce extends Applet implements Runnable{static int r=30;static int x=100;static int y=30;Thread t; public void init(){ t = new Thread(this); t.start();}public void run(){ int y1=+1; int i=1; int sleeptime=10; while(true) { y+=(i*y); if(y-r
getSize().height) y1*=-1; try{ t.sleep(sleeptime); }catch(InterruptedException e){ } }}
2006年10月20日 08点10分
1
getSize().height) y1*=-1; try{ t.sleep(sleeptime); }catch(InterruptedException e){ } }}