Java線程-線程池-延遲連接池

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();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章