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 TestMain { public static void main(String[] args) { //實現一個Callable接口 Callable<Netty> c = new Callable<Netty>() { @Override public Netty call() throws Exception { //這里是你的業務邏輯處理 //讓當前線程阻塞5秒看下效果 System.out.println("---sleep開始---"); Thread.sleep(5000); System.out.println("---sleep結束---"); return new Netty("張三"); } }; System.out.println("---主線程不被阻塞,繼續往下走---"); /*Java通過Executors提供四種線程池,分別為: newCachedThreadPool創建一個可緩存線程池,如果線程池長度超過處理需要,可靈活回收空閑線程,若無可回收,則新建線程。 newFixedThreadPool 創建一個定長線程池,可控制線程最大並發數,超出的線程會在隊列中等待。 newScheduledThreadPool 創建一個定長線程池,支持定時及周期性任務執行。 newSingleThreadExecutor 創建一個單線程化的線程池,它只會用唯一的工作線程來執行任務,保證所有任務按照指定順序(FIFO, LIFO, 優先級)執行。*/ ExecutorService es = Executors.newCachedThreadPool(); //記得要用submit,執行Callable對象 Future<Netty> fn = es.submit(c); //無限循環等待任務處理完畢 如果已經處理完畢 isDone返回true while (!fn.isDone()) { try { //處理完畢后返回的結果 Netty nt = fn.get(); System.out.println("處理完畢后返回的結果:" + nt.name); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } if (fn.isDone()) { System.out.println("關閉"); es.shutdown(); } System.out.println("全部運行結束"); } static class Netty { private Netty(String name) { this.name = name; } private String name; } }