java 執行緒池 ExecutorService相關歸納
public class ExecutorServiceDemo {
public static void main(String[] args) {
// 單執行緒池
ExecutorService executorService1 = Executors.newSingleThreadExecutor();
//固定執行緒數執行緒池
ExecutorService executorService2 = Executors.newFixedThreadPool(2);
//不限數量執行緒池 最大數量 Integer.MAX_VALUE;
ExecutorService executorService3 =Executors.newCachedThreadPool();
PoolDemo demo = new PoolDemo();
SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-DD hh-mm-ss.SSS");
System.out.println("begin"+ sdf.format(new Date()));
//定時執行緒池
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(3);
//TimeUnit.SECONDS說明‘3’的單位是秒 從現在開始,推遲3秒後執行demo的run方法
scheduledExecutorService.schedule(demo, 3, TimeUnit.SECONDS);
//推遲1秒 然後不管前面的執行緒是否執行完, 每隔2秒執行demo的run方法(固定速率)
scheduledExecutorService.scheduleAtFixedRate(demo, 1, 2, TimeUnit.SECONDS);
// 推遲3秒 開始執行demo的run方法 然後在前面執行緒執行完後4秒後 再次執行demo的run方法(固定延遲時間)
scheduledExecutorService.scheduleWithFixedDelay(demo, 3, 4, TimeUnit.SECONDS);
}
}
class PoolDemo implements Runnable{
int num =0 ;
@Override
public void run() {
if(num%2 ==0 ){
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
num++;
}
SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-DD hh-mm-ss.SSS");
System.out.println("執行一次run後"+sdf.format(new Date()));
}
}