多线程有三种实现方式,分别为通过继承Thread类,通过实现Runnable接口,通过实现Callable接口
通过继承Thread类
实现了Thread类后的MyThread类实例可以直接实例后start
package thread;
public class MyThread extends Thread{
@Override
public void run() {
System.out.println("这是通过继承Thread实现的多线程");
}
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start();
}
}
通过实现Runnable接口
MyRunnableThread类实现了Runnable接口后还需要借助Thread实例进行start
public class MyRunnableThread implements Runnable{
public void run() {
System.out.println("通过实现Runnable接口来实现的多线程");
}
public static void main(String[] args) {
MyRunnableThread myRunnableThread = new MyRunnableThread();
Thread thread = new Thread(myRunnableThread);
thread.start();
}
}
通过实现Callable接口
上述的两种多线程创建方式都是没有返回值的,从JDK1.5开始,追加了一个新的开发包:java.util.concurrent,这个包中有个Callable接口,通过实现这个接口,我们可以实现有返回值的多线程方法。
package thread;
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
public class MyCallableThread implements Callable<String> {
public String call() throws Exception {
return "MyCallableThread返回了线程执行结果";
}
public static void main(String[] args) {
try {
MyCallableThread myCallableThread = new MyCallableThread();
FutureTask<String> futureTask = new FutureTask<String>(myCallableThread);
new Thread(futureTask).start();
System.out.println(futureTask.get());
}catch (Exception e){
e.printStackTrace();
}
}
}