1.1 创建线程
Java语言内建了对多线程开发的支持,每个线程都是一个Java.lang.Thread类的实例。因此,要创建一个线程实例,只需要定义一个继承于Thread类的子类即可。例如,下面的代码就创建了一个银行的职员类,实例代码如下:
public class Clerk extends Thread{
public Clerk(String name){
super(name);
}
public void run(){
super.run();//添加具体的工作代码
}
}
- 在该代码中,Clerk继承了父类Thread,表明了它是一个线程类;
- 基于Java单继承的特点,利用这种方法定义的类不能在继承其他父类,因此,也就有了另一种创建线程的方法;
- 构造方法中的String类型的参数是作为线程的名字,每个线程都有一个名字,如果没有指定的话,运行时环境回为它指定一个默认的名字Thread-X,X表示生成的序号,从0开始,其他构造方法见下表;
表1 其他构造方法 构造方法 说明 Thread 创建一个线程实例 Thread(Runnable target) target是线程run执行的目标体 Thread(Runable target,String name) 指定了线程实例的名称 Thread(String name) 创建指定名称的线程实例 Thread(ThreadGroup group,Runnable target) 线程实例作为线程组group的一员 Thread(ThreadGroup group,Runnable target,String name) 创建指定指定名称的线程实例,并作为group引用的线程组的一员 - 每个线程类都需要覆盖从父类Thread继承的run方法,当线程工作时,会去执行该方法中的语句。
1.2 实现Runnable接口创建进程
由于在应用程序中,往往有自己的继承体系,因此,让类似cleck的类必须继承Thread就有一定的困难,因为Cleck可能必须继承一个业务体系中的某个类,如Employee类,这样,基于Java单继承的限制,就无法使得cleck成为一个线程类,因此Java提供了另一种方法来创建线程类。这种方法是一个类声明实现Runnable的接口,使自己成为一个线程的目标对象,具体的代码如下:
public class Clerk implements Runnable{
public void run(){
//添加具体的工作代码
}
- 接口Runnable中只定义了一个run方法,定义了当目标线程执行时必须执行的代码;
- Thread类同样实现了Runnable接口;
- 如果在run方法运行时,需要获得当前执行线程的信息,可以使用Thread的类方法currentThread获得。
有了这个实现Runnable借口的目标体,就可以利用Thread的构造方法创建该目标体的线程实例,实例代码如下:
Thread Clerk=new Thread(new Thread());
1.3 线程状态与线程控制