1. 程式人生 > >java 執行緒池 ExecutorService相關歸納

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()));
            
        }
        
    }