启动线程的方式有如下三种
/** *类说明:新启线程的方式 */ public class NewThread { /*方式一、扩展自Thread类*/ private static class UseThread extends Thread{ @Override public void run() { super.run(); // do my work; System.out.println("I am extends Thread"); } } /*方式二、实现Runnable接口*/ private static class UseRunnable implements Runnable{ @Override public void run() { // do my work; System.out.println("I am implements Runnable"); } } /** * 方式三、实现Callable接口 * */ private static class CallThread implements Callable<String>{ @Override public String call() throws Exception { return "I am callable Thread"; } } /* *测试线程启动 */ public static void main(String[] args) throws InterruptedException, ExecutionException { //第一种方式启动 UseThread useThread = new UseThread(); useThread.start(); //useThread.start();//重复启动报错 //第二种方式启动 UseRunnable useRunnable = new UseRunnable(); new Thread(useRunnable).start(); //第三种方式启动 实现Callable接口需要用FutureTask进行包装,因为FutureTask实现了Runable接口和Future接口 CallThread callThread = new CallThread(); FutureTask<String> futureTask = new FutureTask<>(callThread); new Thread(futureTask).start(); System.out.println(futureTask.get());//该方法是阻塞方法 } }