文章目录Java创建线程的3种方式
一、继承Thread类
public static class ThreadExtend extends Thread {
public void run() {
System.out.println("Thread extends method!");
}
}
优点
在run()方法内部获取当前线程直接使用this即可,无需使用Thread.currentThread()方法;
缺点
java是单继承,继承了Thread之后无法继承其他类。另外任务与代码没有分离,当多个线程执行一样的任务时需要多份任务代码。
二、实现Runnable接口
public static class RunnableImplement implements Runnable {
@Override
public void run() {
System.out.println("Runnable implements method!");
}
}
优点
子类除了可以实现Runnable接口之外,还可实现其他接口,增加了灵活性。
三、实现Callable接口
public static class CallableImplement implements Callable<String> {
@Override
public String call() throws Exception {
return "Callable implements method!";
}
}
优点
前两者都可以执行任务,但是没有返回值,无法获取线程执行后的结果。通过实现Callable接口可以获取返回值,除此之外通过泛型可以获取不同类型的结果。
四、结果
public static void main(String[] args) throws Exception {
ThreadExtend threadExtend = new ThreadExtend();
threadExtend.start();
RunnableImplement runnableImplement = new RunnableImplement();
Thread thread = new Thread(runnableImplement);
thread.start();
FutureTask<String> futureTask = new FutureTask<>(new CallableImplement());
new Thread(futureTask).start();
System.out.println(futureTask.get());
}