執行緒_執行緒池
阿新 • • 發佈:2019-01-12
1.認識Executor介面 最頂層介面
package com.hpd.executor; import java.util.concurrent.Executor; public class T01_MyExecutor implements Executor { public static void main(String[] args) { new T01_MyExecutor().execute(()->System.out.println("helllo executor")); } @Overridepublic void execute(Runnable command) { //new Thread(command).start();//開啟一個執行緒去呼叫 command.run();//直接的方法呼叫 } }
2.ExecutorService介面 (繼承自Executor介面)
除了繼承的executor()方法外,還提供了submit(Callable<T> task)方法,submit(Runnable task)
3Executors工具類
4ThreadPool
package com.hpd.executor;import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import javax.swing.plaf.synth.SynthSplitPaneUI; public class T02_ThreadPool { public static void main(String[] args) throws InterruptedException { ExecutorService service= Executors.newFixedThreadPool(5); for(int i=0;i<6;i++) { service.execute(()->{ try { TimeUnit.MICROSECONDS.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()); }); } System.out.println(service); service.shutdown(); System.out.println(service.isTerminated()); System.out.println(service.isShutdown()); System.out.println(service); TimeUnit.MICROSECONDS.sleep(5000); System.out.println(service.isTerminated()); System.out.println(service.isShutdown()); System.out.println(service); } }
[email protected][Running, pool size = 5, active threads = 5, queued tasks = 1, completed tasks = 0]
false
true
[email protected][Shutting down, pool size = 5, active threads = 5, queued tasks = 1, completed tasks = 0]
pool-1-thread-2
pool-1-thread-4
pool-1-thread-1
pool-1-thread-5
pool-1-thread-3
pool-1-thread-2
true
true
[email protected][Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 6]
5FutureTask和Future
package com.hpd.executor; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.FutureTask; import java.util.concurrent.TimeUnit; public class T03_Future { public static void main(String[] args) throws InterruptedException, ExecutionException { FutureTask<Integer> task = new FutureTask<>(()-> { //用FurureTask包裝Callable任務 TimeUnit.MILLISECONDS.sleep(500); //Thread只能傳入FutureTask不能傳入Callable return 1000; }); new Thread(task).start(); System.out.println(task.get());//阻塞 ExecutorService service = Executors.newFixedThreadPool(5); Future<Integer> f= service.submit(()->{ //submit方法直接傳入Callable任務 TimeUnit.MICROSECONDS.sleep(500); return 1; }); System.out.println(f.isDone()); } }
6.------