继承Thread类

8 多线程程序设计

8.1  线程概述

程序的运行叫进程,计算机上同时运行多个程序叫进程并发。在Windows下复制一个活动盘内容到计算机固定硬盘上,用户可以同时进行Word文档处理。这种情况下,用户可以直观地感觉到两个程序同时运行。“同时”是指程序启动后,都处于运行而没有结束的状态。

计算机系统一般只有一个CPU,为了一个高速的CPU可以同时运行多个程序,操作系统按照一定的策略(优先级、循环等)轮流运行每个进程,调度各个进程执行,以最大限度有效地利用计算机的各种资源,这就是所谓的操作系统进程调度。

在一个程序(主程序)内部,有时也需要它的几个程序段同时运行,每个程序段的并发运行叫线程。这些线程与主线程共享代码空间及其他资源,提高了程序并行运行的效率。

多线程程序设计是指单个程序包含并发执行的程序段,如图8-1所示。当多线程程序执行时,该程序对应的进程(主线程)中就有多个控制流在同时运行,即具有并发执行的多个线程。在一个进程中包含并发执行的多个控制流,这就是多线程程序设计。

图8-1  多线程示意图

多线程技术用途很多。典型例子有:网页动画设计中,多个画面同时运动;网络服务器创建一个新的线程来响应网络用户请求,从而并发执行多个服务线程,提高服务效率。

Java运行环境中主程序运行时对应的“进程”,习惯称其为主线程。下面介绍如何编程实现启动、运行、控制多个线程。

实现线程有两种方法:继承Thread类和实现(implementsRuannable接口。

8.1.1  继承Thread类

线程描述相对独立的程序段的运行,它具有操作系统中进程的许多相同特征:它必须有对应运行的程序段;为了在系统中识别线程,它有惟一的命名;线程运行中,由于不同事件的影响,使它处于不同状态,因此必须有控制线程状态变化的各种方法;逻辑上相关的不同线程构成一个线程组,线程组又可以成为线程保护的一道屏障。Java语言包中的 Thread类就是完成线程运行的程序段的定义、线程状态的控制。

Thread类是Java语言包中的一个可重用类。Thread对象代表Java程序中单个的运行线程。Thread实现了Runnable接口,Runnable接口定义run()方法,该方法中包含了运行时执行的代码。一个类通过继承Thread类,同时重写其run()方法,就可以实现多线程的方式运行,并继承Thread类的所有方法。Run()方法是运行线程的主体,启动线程时,由Java直接调用run()方法。

8-1 继承Thread类, 实现一个定时线程,即线程在给定期间每隔一定时间(1秒),屏幕显示时间累计数(秒数),时间结束时线程自动停止、撤销。

package cha8;

public class Timer1 extends Thread   //定时类Timer继承Thread类

{ static int stop=20;

  int time=0;              //定时的时间间隔,变量初始化值为0秒

  public Timer1(int time) 

  /* Timer类构造方法,构造方法的参数为需要定时的时间(单位为秒)*/

  {

    this.time=time;

  }

  public void run()

//Timer重写父类Thread 的方法run(),这是该线程运行的程序段

  { try

        {for(int i=0;i<stop;i++ )

        {

            Thread.sleep(1000);    

//线程睡眠1秒,这期间它不执行,好像停止在这一样

            System.out.println(“time=”+i*time);

//屏幕显示i值,i表示时间间隔数,这里表示秒数

        }

        }

        catch(Exception e)       //捕获异常

        {

        System.out.println(e.toString());  //异常处理,屏幕显示异常信息

        }

  }

public static void main(String args[]) {  //主线程对应的运行程序

  Timer1 timer1=new Timer1(10);     

 //构造Timer的对象timer1,即一个线程。设置定时10

  Timer1 timer2=new Timer1(5);      

//构造Timer的对象timer2,即另一个线程,设置定时5

 timer1.start();  //启动线程timer1运行

  timer2.start(); 

//启动线程timer2运行, timer1timer2两个定时线程同时运行

 }

}

在程序执行过程中,两个定时器线程可以独立于主线程运行,并设置自己的运行时间限制。

posted @ 2009-04-16 17:07  南守拥  阅读(592)  评论(0编辑  收藏  举报