JAVA线程缓存池
Java通过Executors提供四种线程池,分别为:
newCachedThreadPool创建⼀个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若⽆可回收,则新建线程。newFixedThreadPool 创建⼀个定长线程池,可控制线程最⼤并发数,超出的线程会在队列中等待。
newScheduledThreadPool 创建⼀个定长线程池,⽀持定时及周期性任务执⾏。
newSingleThreadExecutor 创建⼀个单线程化的线程池,它只会⽤唯⼀的⼯作线程来执⾏任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执⾏。
(1) newCachedThreadPool
创建⼀个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若⽆可回收,则新建线程。⽰例代码如下:
Java代码
1. package test;
2. import urrent.ExecutorService;
3. import urrent.Executors;
4. public class ThreadPoolExecutorTest {
5.  public static void main(String[] args) {
6.  ExecutorService cachedThreadPool = wCachedThreadPool();
7.  for (int i = 0; i < 10; i++) {
8.    final int index = i;
9.    try {
10.    Thread.sleep(index * 1000);
11.    } catch (InterruptedException e) {
12.    e.printStackTrace();
13.    }
14.    ute(new Runnable() {
15.    public void run() {
16.      System.out.println(index);
17.    }
18.    });
19.  }
20.  }
21. }
线程池为⽆限⼤,当执⾏第⼆个任务时第⼀个任务已经完成,会复⽤执⾏第⼀个任务的线程,⽽不⽤每次新建线程。
(2) newFixedThreadPool
创建⼀个定长线程池,可控制线程最⼤并发数,超出的线程会在队列中等待。⽰例代码如下:
Java代码
1. package test;
2. import urrent.ExecutorService;
3. import urrent.Executors;
java线程池创建的四种4. public class ThreadPoolExecutorTest {
5.  public static void main(String[] args) {
6.  ExecutorService fixedThreadPool = wFixedThreadPool(3);
7.  for (int i = 0; i < 10; i++) {
8.    final int index = i;
9.    ute(new Runnable() {
10.    public void run() {
11.      try {
12.      System.out.println(index);
13.      Thread.sleep(2000);
14.      } catch (InterruptedException e) {
15.      e.printStackTrace();
16.      }
17.    }
18.    });
19.  }
20.  }
21. }
因为线程池⼤⼩为3,每个任务输出index后sleep 2秒,所以每两秒打印3个数字。
定长线程池的⼤⼩最好根据系统资源进⾏设置。如Runtime().availableProcessors()
(3)  newScheduledThreadPool
创建⼀个定长线程池,⽀持定时及周期性任务执⾏。延迟执⾏⽰例代码如下:
Java代码
1. package test;
2. import urrent.Executors;
3. import urrent.ScheduledExecutorService;
4. import urrent.TimeUnit;
5. public class ThreadPoolExecutorTest {
6.  public static void main(String[] args) {
7.  ScheduledExecutorService scheduledThreadPool = wScheduledThreadPool(5);
8.  scheduledThreadPool.schedule(new Runnable() {
9.    public void run() {
10.    System.out.println("delay 3 seconds");
11.    }
12.  }, 3, TimeUnit.SECONDS);
13.  }
14. }
表⽰延迟3秒执⾏。
定期执⾏⽰例代码如下:
Java代码
1. package test;
2. import urrent.Executors;
3. import urrent.ScheduledExecutorService;
4. import urrent.TimeUnit;
5. public class ThreadPoolExecutorTest {
6.  public static void main(String[] args) {
7.  ScheduledExecutorService scheduledThreadPool = wScheduledThreadPool(5);
8.  scheduledThreadPool.scheduleAtFixedRate(new Runnable() {
9.    public void run() {
10.    System.out.println("delay 1 seconds, and excute every 3 seconds");
11.    }
12.  }, 1, 3, TimeUnit.SECONDS);
13.  }
14. }
表⽰延迟1秒后每3秒执⾏⼀次。
(4) newSingleThreadExecutor
创建⼀个单线程化的线程池,它只会⽤唯⼀的⼯作线程来执⾏任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执⾏。⽰例代码如下:Java代码
1. package test;
2. import urrent.ExecutorService;
3. import urrent.Executors;
4. public class ThreadPoolExecutorTest {
5.  public static void main(String[] args) {
6.  ExecutorService singleThreadExecutor = wSingleThreadExecutor();
7.  for (int i = 0; i < 10; i++) {
8.    final int index = i;
9.    ute(new Runnable() {
10.    public void run() {
11.      try {
12.      System.out.println(index);
13.      Thread.sleep(2000);
14.      } catch (InterruptedException e) {
15.      e.printStackTrace();
16.      }
17.    }
18.    });
19.  }
20.  }
21. }
结果依次输出,相当于顺序执⾏各个任务。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。