整理不易求關(guān)注[送心]
通過繼承 Thread 類
繼承Thread類,重新run方法
public class Test extends Thread { @Override public void run() { System.out.println(Thread.currentThread().getName()); } public static void main(String[] args) { Test test1 = new Test(); Test test2 = new Test(); test1.start(); test2.start(); }}
通過實現(xiàn) Runnable 接口
實現(xiàn)Runnable接口,重寫run方法
public class Test implements Runnable { @Override public void run() { System.out.println(Thread.currentThread().getName()); } public static void main(String[] args) { Thread thread1 = new Thread(new Test()); Thread thread2 = new Thread(new Test()); thread1.start(); thread2.start(); }}
通過實現(xiàn) Callable 接口
通過實現(xiàn)Callable接口,重寫call方法,配合FutureTask,可以得到異步執(zhí)行的結(jié)果。
public class Test implements Callable { @Override public Object call() throws Exception { return Thread.currentThread().getName(); } public static void main(String[] args) throws ExecutionException, InterruptedException { FutureTask futureTask = new FutureTask(new Test()); Thread thread = new Thread(futureTask,”線程名稱”); thread.start(); // 得到異步執(zhí)行結(jié)果 System.out.println(futureTask.get()); }}
通過Lambda表達(dá)式方式
直接使用Lambda表達(dá)式方式創(chuàng)建多線程,不需要繼承或者實現(xiàn)類。(看起來很酷[綠帽子])
public class Test { public static void main(String[] args) { Runnable runnable = () -> { System.out.println(Thread.currentThread().getName()); }; new Thread(runnable).start(); }}
通過內(nèi)部類方式
public class Test { public static void main(String[] args) { // 1. new Thread() { @Override public void run() { System.out.println(Thread.currentThread().getName()); } }.start(); // 2. new Thread(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName()); } }).start(); // 3. new Thread(()->{ System.out.println(Thread.currentThread().getName()); }).start(); }}
通過線程池方式
提供四種創(chuàng)建線程池的方式:
public class Test { public static void main(String[] args) { // 定長線程池,固定線程總數(shù) ExecutorService executorService1 = Executors.newFixedThreadPool(10); // 可緩存線程池,無限大,如果線程池沒有可用線程就會自動創(chuàng)建,有的話就自動利用起來 ExecutorService executorService2 = Executors.newCachedThreadPool(); // 單線程池 ExecutorService executorService3 = Executors.newSingleThreadExecutor(); // 調(diào)度線程池 ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(10); }}