10.線程池

什麼時線程池?
線程池是指在初始化一個多線程應用程序中建立的一個線程集合,而後在執行新的任務的時重用這些線程而不是從新建立一個線程,線程池中的線程數量徹底取決於可用內存數量和運用程序的需求,然而增長可用線程數是可能的,線程池中每個線程都有分配一個任務,一旦任務執行完後,會回到池子中並等待下一次的任務分配
 
 
1.建立一個可緩存線程池,若是線程池長度超過處理須要,可靈活回收空閒線程,若無可回收,則新建線程。
//最經常使用的線程池
package com.jlong;
 
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
 
public class NewCachedThreadTest {
    public static void main(String[] args) {
        //建立可緩存線程
        ExecutorService executorService = Executors.newCachedThreadPool();
        //執行execute表示建立了線程 相似start()
        for (int i = 0; i <30 ; i++) {
            int index=i;
            executorService.execute(new Runnable() {
                @Override
                public void run() {
                    System.out.println(Thread.currentThread()+"----"+index);
                }
            });
        }
    }
}
 
2.建立一個定長線程池,可控制線程最大併發數,超出的線程會在隊列中等待。
 
package com.jlong;
 
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
 
public class NewFiexdThreadPoolTest {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(3);
        for (int i = 0; i <30 ; i++) {
            int index=i;
            executorService.execute(new Runnable() {
                @Override
                public void run() {
 
                    try {
                        Thread.sleep(500);
                        System.out.println(Thread.currentThread()+"----"+index);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    }
}
3.建立一個定長線程池,支持定時及週期性任務執行。延遲執行
package com.jlong;
 
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
 
public class NewScheduledThreadTest {
    public static void main(String[] args) {
        ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(6);
        scheduledExecutorService.schedule(new Runnable() {
            @Override
            public void run() {
                System.out.println("三秒鐘後執行。。。。。");
            }
        },3, TimeUnit.SECONDS);
 
    }
}
 
4.單線程,幾乎沒有用到
 
package com.jlong;
 
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
 
public class NewSingleThreadExecutorTest {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        for (int i = 0; i < 30; i++) {
            int index=i;
            executorService.execute(new Runnable() {
                @Override
                public void run() {
                    System.out.println(Thread.currentThread().getName()+"------"+index);
                }
            });
        }
    }
}
相關文章
相關標籤/搜索