多线程的几种实现方式

2020-08-16 教育 87阅读

1、继承Thread类创建线程
Thread类本质上是实现了Runnable接口的一个实例,代表一个线程的实例。启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法。这种方式实现多线程很简单,通过自己的类直接extend Thread,并复写run()方法,就可以启动新线程并执行自己定义的run()方法。例如:

public class MyThread extends Thread {  
public void run() {  
 System.out.println("MyThread.run()");  
}  
}  
 
MyThread myThread1 = new MyThread();  
MyThread myThread2 = new MyThread();  
myThread1.start();  
myThread2.start();

2、实现Runnable接口创建线程
如果自己的类已经extends另一个类,就无法直接extends Thread,此时,可以实现一个Runnable接口,如下:

public class MyThread extends OtherClass implements Runnable {  
public void run() {  
 System.out.println("MyThread.run()");  
}  
}

为了启动MyThread,需要首先实例化一个Thread,并传入自己的MyThread实例:

MyThread myThread = new MyThread();  
Thread thread = new Thread(myThread);  
thread.start();

事实上,当传入一个Runnable target参数给Thread后,Thread的run()方法就会调用target.run(),参考JDK源代码:

public void run() {  
if (target != null) {  
 target.run();  
}  
}

3、实现Callable接口通过FutureTask包装器来创建Thread线程

Callable接口(也只有一个方法)定义如下:

public interface Callable   { 
  V call() throws Exception;   
 }
public class SomeCallable extends OtherClass implements Callable {
    @Override    public V call() throws Exception {        // TODO Auto-generated method stub
        return null;
    }
}
Callable oneCallable = new SomeCallable();   
//由Callable创建一个FutureTask对象:   
FutureTask oneTask = new FutureTask(oneCallable);   
//注释:FutureTask是一个包装器,它通过接受Callable来创建,它同时实现了Future和Runnable接口。 
  //由FutureTask创建一个Thread对象:   
  Thread oneThread = new Thread(oneTask);   
  oneThread.start();   
//至此,一个线程就创建完成了。
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com