方式一:继承Thread重写run()方法
方式二:实现runnable接口,并实现run()方法
方式三:实现callable接口,重写call()方法
三种方式的代码如下:
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class 多現成 {
public static void main(String[] args) throws InterruptedException, ExecutionException {
MyThread thread = new MyThread();
thread.start();
MyRunnable runnable = new MyRunnable();
Thread t = new Thread(runnable);
t.start();
ExecutorService threadPool = Executors.newSingleThreadExecutor();
Future future = threadPool.submit(new CallableTest());
System.out.println("waitint thread to finish");
System.out.println(future.get());//等待线程结束,并获取返回结果
}
}
class MyThread extends Thread{
@Override
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Thread");
}
}
class MyRunnable implements Runnable {
@Override
public void run(){
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Runnable");
}
}
class CallableTest implements Callable {
@Override
public String call() throws Exception {
Thread.sleep(3000);
return "hello callable";
}
}