java線程池的學習

package advancedJava;java

import java.util.concurrent.ExecutorService;編程

import java.util.concurrent.Executors;緩存

import java.util.concurrent.TimeUnit;ide

 * java 線程池學習工具

 * @author: cuiHoop

 * Date: 13-12-7學習

public class ThreadPoolTest {測試

    * 線程池的概念ui

    * jdk5提出了ThreadPool的概念spa

    * 之因此採用線程池的主要緣由在於:

    * 線程時間=T1(建立時間)+T2(運行時間)+T3(銷燬時間)

    * 線程池則能夠一個線程空閒下來後爲另外一個服務,這樣子,就達到了總體的效果,

    * 嘿嘿(敏捷團隊的每個人同樣)

    * 四種種靜態工廠線程池

    * 固定線程池

    * 緩存線程池

    * 單一線程池 (採用替補的方式)

    * 另外,還有定時器的線程池 (使用能夠參考Timer的使用)

    public static void main(String[] args) {

        * 測試實例說明

        * 有100個任務,一次提交給線程池10個,分析線程池,每次的處理狀況

        //固定的線程池

//        ExecutorService threadPool = Executors.newFixedThreadPool(3);            //Executor是一個工具類,聲明瞭一個具備三個線程的線程池

        //緩存的線程池 ,根據任務量自動增長線程數量,和回收 ,就會自動增長到十個線程

//         ExecutorService threadPool = Executors.newCachedThreadPool();

        //線程池中只有一個線程,可是線程死了後能夠對另外一個線程調用從新啓動,(單線程池)

        ExecutorService threadPool = Executors.newSingleThreadExecutor();

        for (int i = 0;i<10;i++){

            final int finalI = i;

            threadPool.execute(new Runnable() {            //任務執行

                @Override   http://www.huiyi8.com/jiaoben/

                public void run() {flash特效

                    for(int j = 0;j<10;j++){

                        try {

                            Thread.sleep(20);                 //便於輸出觀看

                        } catch (InterruptedException e) {

                            e.printStackTrace();

                        }

                        System.out.println(Thread.currentThread().getName()+" loop of " + finalI +

                        " for task of "+ j);     //某個線程正在進行第幾回循環

        System.out.println("all of 10 tasks have committed");

//        threadPool.shutdown();

        //採用定時任務,定時器任務類型

        Executors.newScheduledThreadPool(3).scheduleAtFixedRate(new Runnable() {

            @Override

            public void run() {

                System.out.println("bombing");

        },5,2, TimeUnit.SECONDS);   //5秒以後炸,每一個2秒炸一下  ,schedule(定時任務)或者schedule以後定時,最後一個是單位

/**分析

* 真正的線程接口是ExecutorService,而Executor是一個頂級的接口。

* 線程池的編程模式下,任務是提交給整個池子,由池子來負責分配任務;至關於,先接手(接受任務防止長時間的等待),接手後進行細節分配。

* 任務是提交給線程池的,可是一個線程只能執行一個任務,可是能夠同時向線程池提交多個任務。

* 可是對於高端的使用,須要本身定製線程池

相關文章
相關標籤/搜索