1、指定大小延遲連接池
創建一個可以延遲的連接池子,並且固定大小爲2。如果線程數量超過2,那麼,當前線程就會進入等待狀態,直到其它線程用完之後,再獲得被釋放的池子執行任務。
public class ThreadExtend_Pool_Scheduled extends Thread {
public class ThreadExtend_Pool_Scheduled extends Thread {
private String name;
ThreadExtend_Pool_Scheduled(String name){
this.name=name;
}
@Override
public void run(){
System.out.println(this.name+"正在執行......");
}
public static void main(String args[]){
//創建一個線程池,它可安排給延遲後運行命令或者定期執行
ScheduledExecutorService executorService= Executors.newScheduledThreadPool(2);
Thread thread1=new ThreadExtend_Pool_Scheduled("Thread-1");
Thread thread2=new ThreadExtend_Pool_Scheduled("Thread-2");
Thread thread3=new ThreadExtend_Pool_Scheduled("Thread-3");
Thread thread4=new ThreadExtend_Pool_Scheduled("Thread-4");
Thread thread5=new ThreadExtend_Pool_Scheduled("Thread-5");
//將線程放入線程池當中進行執行
executorService.schedule(thread1,10, TimeUnit.MILLISECONDS);
executorService.schedule(thread2,10, TimeUnit.MILLISECONDS);
executorService.execute(thread3);
//使用延遲執行的風格的方法
executorService.execute(thread4);
executorService.execute(thread5);
//關閉線程池子
executorService.shutdown();
}
}
結果如下:
Thread-4正在執行......
Thread-3正在執行......
Thread-5正在執行......
Thread-1正在執行......
Thread-2正在執行......
通過結果發現,線程1和線程2總是在最後才執行,原因是線程1和線程2進行了延遲執行。
2、單任務延遲連接池
創建單個任務線程連接池
public class ThreadExtend_Pool_Scheduled_Single extends Thread {
private String name;
public ThreadExtend_Pool_Scheduled_Single(String name){
this.name=name;
}
@Override
public void run(){
System.out.println(this.name+"正在執行......");
}
public static void main(String args[]){
//創建一個單任務的線程池
ScheduledExecutorService executorService= Executors.newSingleThreadScheduledExecutor();
Thread thread1=new ThreadExtend_Pool_Scheduled_Single("thread-1");
Thread thread2=new ThreadExtend_Pool_Scheduled_Single("thread-2");
Thread thread3=new ThreadExtend_Pool_Scheduled_Single("thread-3");
Thread thread4=new ThreadExtend_Pool_Scheduled_Single("thread-4");
Thread thread5=new ThreadExtend_Pool_Scheduled_Single("thread-5");
//將線程放入線程池當中進行執行
executorService.schedule(thread1,10, TimeUnit.MILLISECONDS);
executorService.schedule(thread2,10, TimeUnit.MILLISECONDS);
executorService.execute(thread3);
//使用延遲執行的風格的方法
executorService.execute(thread4);
executorService.execute(thread5);
//關閉線程池子
executorService.shutdown();
}
}