创建线程的4种方式
1. 继承Thread类创建线程public class Thread1 extends Thread { public void run() { System.out.println(Thread.currentThread().getName() is running...); } public static void main(String[] args) { Thread1 thread1 new Thread1(); thread1.setName(thread-1); thread1.start(); } }2. 实现Runnable接口创建线程public class Thread2 implements Runnable{ Override public void run() { System.out.println(Thread.currentThread().getName() is running...); } public static void main(String[] args) { Thread2 thread2 new Thread2(); new Thread(thread2,thread-2).start(); } }3. 使用Callable和Future创建线程public class Thread3 implements Callable { Override public Object call() throws Exception { int i 0; for (; i 5; i) { System.out.println(Thread.currentThread().getName() - i); } return i; } public static void main(String[] args) { Thread3 thread3 new Thread3(); FutureTask futureTask new FutureTask(thread3); new Thread(futureTask, callThread).start(); try { System.out.println(futureTask.get()); // 获取返回值 } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } }4. 使用线程池创建public class Thread4 { public static void main(String[] args) { ExecutorService executorService Executors.newFixedThreadPool(15); executorService.execute(new Thread5()); try { Future future executorService.submit(new Thread6()); String result (String) future.get(); // 获取返回值 System.out.println(result); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } executorService.shutdown(); } } class Thread5 implements Runnable { Override public void run() { System.out.println(Thread.currentThread().getName() is running...); } } class Thread6 implements Callable{ Override public Object call() throws Exception { return thread-6; } }第3种第4种可以获取返回值。