java.util.concurrent線程池

//ExecutorService threadPool= Executors.newFixedThreadPool(3);//得到固定大小的線程池,線程個數爲3個
        //ExecutorService threadPool= Executors.newCachedThreadPool();//緩存線程池(線程數動態變化),當任務過來服務不過來時,自動增加線程個數來執行任務
        /*ExecutorService threadPool= Executors.newSingleThreadExecutor();//單例線程池,線程池中只有一個線程,如果線程池中的線程死亡,就會自動再找一個替補,保證有一個線程--如何實現線程死亡後重新啓動(找替補)
        for(int j=1;j<=10;j++){
            final int task=j;//處理final
            threadPool.execute(new Runnable()//爲線程池放入的任務
            {
                
                public void run()
                {
                    for(int i=1;i<=10;i++){
                        System.out.println(Thread.currentThread().getName()+" loop of "+i+" for task "+task);
                    }
                }
            });
        }
        threadPool.shutdown();//啓動一次順序關閉,執行以前提交的任務,但不接受新任務
        //threadPool.shutdownNow();//試圖停止所有正在執行的活動任務,暫停處理正在等待的任務,並返回等待執行的任務列表
        */
        
        //定時器線程池
        ScheduledExecutorService threadPool= Executors.newScheduledThreadPool(3);
        //過一段時間後執行任務
        /*threadPool.schedule(new Runnable()
        {
            
            public void run()
            {
                System.out.println("bombing");
            }
        }
        ,10,TimeUnit.SECONDS
        );*/
        //以固定的頻率執行任務
        threadPool.scheduleAtFixedRate(
                new Runnable()//任務代碼
                {
                    public void run()
                    {
                        System.out.println("bombing");
                    }
                },
                2,//隔多長時間後執行定時器
                5,//頻率時間
                TimeUnit.SECONDS//時間單位
        );
        //所有的 schedule 方法都接受相對的延遲和週期作爲參數,而不是絕對的時間或日期,將以Date所表示的絕對時間
        //轉換成要求的形式很容易.例如,要安排某個以後的 Date 運行,可以使用:schedule(task,date.getTime()-System.currentTimeMillis(),TimeUnit.MILLISECONDS)
發佈了38 篇原創文章 · 獲贊 6 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章