> 建立固定大小的線程池java
> 建立緩存線程池緩存
> 建立單一線程池(如何實現線程死掉後重啓?)併發
> shutdown與shutdownNow的比較
前者是任務執行完畢即關閉程序,或者表示當即關閉而不會關心任務是否已經完成。ide
> 調用ScheduledExecutorService的schedule方法,返回的ScheduleFuture對象能夠取消任務oop
> 支持間隔重複任務的定時方式,不直接支持絕對定時方式,須要轉換成相對時間方式spa
/** * @Title: ThreadPoolTest.java * @Package com.lh.threadtest.t8 * @Description: TODO * @author Liu * @date 2018年1月17日 下午2:17:40 * @version V1.0 */ package com.lh.threadtest.t8; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; /** * @ClassName: ThreadPoolTest * @Description: java5線程併發庫的應用(常見幾種線程池類型) * @author Liu * @date 2018年1月17日 下午2:17:40 * */ public class ThreadPoolTest { /*** * @Title: main * @Description: TODO * @param @param args * @return void * @throws */ public static void main(String[] args) { //建立固定大小的線程池 // ExecutorService executorService = Executors.newFixedThreadPool(3); //建立緩存線程池 // ExecutorService executorService = Executors.newCachedThreadPool(); //建立單一線程池(如何實現線程死掉後重啓?) ExecutorService executorService = Executors.newSingleThreadExecutor(); for(int i = 1; i <= 10; i++){ final int task = i; executorService.execute(new Runnable() { @Override public void run() { for(int i = 1; i <= 10; i++){ try { //模擬處理延時 TimeUnit.MILLISECONDS.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + " is looping of: " + i + " for task of " + task); } } }); } System.out.println("All of 10 tasks have commited!"); // executorService.shutdownNow(); executorService.shutdown(); } }
/** * @Title: ThreadPoolTest.java * @Package com.lh.threadtest.t8 * @Description: TODO * @author Liu * @date 2018年1月17日 下午2:17:40 * @version V1.0 */ package com.lh.threadtest.t8; import java.util.Date; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; /** * @ClassName: ThreadPoolTest * @Description: java5線程併發庫的應用(線程池定時任務) * * 支持間隔重複任務的定時方式,不直接支持絕對定時方式,須要轉換成相對時間方式 * date.getTime() - System.currentTimeMillis() * * @author Liu * @date 2018年1月17日 下午2:17:40 * */ public class ThreadPoolTest2 { /*** * @Title: main * @Description: TODO * @param @param args * @return void * @throws */ public static void main(String[] args) { Executors.newScheduledThreadPool(3).schedule(new Runnable() { @Override public void run() { System.out.println("bombing!"); } }, 10, TimeUnit.SECONDS); while(true){ try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(new Date().getSeconds()); } } }
/** * @Title: ThreadPoolTest.java * @Package com.lh.threadtest.t8 * @Description: TODO * @author Liu * @date 2018年1月17日 下午2:17:40 * @version V1.0 */ package com.lh.threadtest.t8; import java.util.Date; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; /** * @ClassName: ThreadPoolTest * @Description: java5線程併發庫的應用(定時任務,連環爆炸) * * 支持間隔重複任務的定時方式,不直接支持絕對定時方式,須要轉換成相對時間方式: * date.getTime() - System.currentTimeMillis() * * @author Liu * @date 2018年1月17日 下午2:17:40 * */ public class ThreadPoolTest3 { /*** * @Title: main * @Description: java5線程併發庫的應用 * @param @param args * @return void * @throws */ public static void main(String[] args) { Executors.newScheduledThreadPool(3).scheduleAtFixedRate(new Runnable() { @Override public void run() { System.out.println("bombing!"); } }, 5, 3, TimeUnit.SECONDS); while(true){ try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(new Date().getSeconds()); } } }