二、 在Java中实现多线程

Java 程序中的public static void main( )方法是主线程的人口,运行Java程序时,会先执行这个方法。
        开发中, 用户编写的线程般都是指除了主线程之外的其他线程。
        使用一个线程的过程,可以分为4个步骤:
        (1)定义一个线程,同时指明这个线程所要执行的代码,即期望完成的功能。
        (2)创建线程对象。
        (3)启动线程。
        (4)终止线程。
        定义一个线程类通常有两种方法,分别是继承java.lang.Thraed类和实现ava.lang.Runnable接口。

2.1使用Thread类创建线程

       Java提供了java.lang. Thread类支持名线程编程,该类提供了大量的方法来控制和操作线程,如表2-1所示。这些方法可以先初步了解,后面使用到时再深人学习。

                                                                    表2-1 Thread类常用方法

                           方法

                                                                  说明

void run( )

执行任务操作的方法

void start( )

使该线程开始执行

void sleep(long millis)

在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)

String getName( )

返回该线程的名称

int getPriority()

返回线程的优先级

void setPriority(int newPriority)

更改线程的优先级

Thread.State getState()

返回该线程的状态

boolcean isAlive( )

测试线程是否处于活动状态

void join( )

等待该线程终止

void interrupt( )

中断线程

void yield()

暂停当前正在执行的线程对象,并执行其他线程

       创建线样时继承Thread 类并重写Thread类的run( )方法。Thread 类的run( )方法是线程要执行操作任务的方法,所以线程要执行的操作代码都需要写在run( )方法中,并通过调用start( )方法来启动线程。

示例1

       使用继承Thread类的方式创建线程,在线程中输出1~100的整数。
       实现步骤:
       (1)定义MyThread类继承Thread类,重写run( )方法, 在run( )方法中实现数据输出.
       (2)创建线程对象。
       (3)调用start( )方法启动线程。
       关键代码:  

//通过继承Thread类来创建线程
public class MyThread extends Thread{
        private int count=0;
        //重写run()方法
        public void run(){
            while (count<100) {
                count++;
                system.out.println ("count的值是: "+count);
            }
        }
} 
//启动线程
publlc class Test{
    public static vold main(String args){
        //实例化线程对象
        MyThread mt = new MyThread();        
        //启动线程
        mt.start();
    }
}

由示例1可以看出,创建线程对象时将不会开启线程,必须到用线是对象的start( )方法才能使线程开始执行。

2.2使用Runnable接口创建线程

       使用继承Thread类的方式创建线程简单明了,符合大家的习惯,但它也有一个缺点, 如果定义的类已经继承其他类则无法再继承Thread类。使用Runnable接口创建线程的方式可以解决上述问题。Runnable接口中声明了一个run( )方法,即public void run()。一个类可以通过实现 Runmable接口并实现其run( )方法完成线程的所有活动,已实现的run( )方法称为该对象的线程体。任何实现Runnable接口的对象都可以作为一个线程的目标对象。

示例2

       使用实现Runnable接口的方式创建线程,在线程中输出1~100的整数。
       实现步骤:
       (1)定义MyThread类实现java.lang.Runnable接口,并实现Runnable接口的run( )方法,在run( )方法中实现输出数据。
       (2)创建线程对象。
       (3)调用star( )方法启动线程,
       关键代码:
 

//通过实现Runnable楼口创建线程
publie class MyThread implements Runnable{
    private int count = 0;
    //实现run()方法
    public void run(){
        while (count<100){
            count++;
            System .out .printin("count的值是: "+count);
        }
    }
} 
//启动线程
public class Test{
    publie statie vold main(string args){
        //创建线程对象,将实现Runnable的线程类对象作为参数
        Thread thread = new Thread(new MyThread());
        //启动线程
        thread.start();
    }
}

       示例2中,通过Thread tread=new Thread(new MyThread( ))创建线程对象。
       两种创建线程的方式有各白的特点和应用领域:直接继承Thread类的方式编写简单,可以直接操作线程,适用于单重继承的情况;实现Runnable接口的方式,当一个线程继承了另一个类时,就只能用实现Runnable 接口的方法来创建线程,而且这种方式还可以使名个线程之间使用同一个Runnable对象。