1. package com.nf147.Constroller;
  2. import java.util.concurrent.ExecutorService;
  3. import java.util.concurrent.Executors;
  4. import java.util.concurrent.ScheduledExecutorService;
  5. import java.util.concurrent.TimeUnit;
  6. public class ThreadPool {
  7. public static void main(String[] args) {
  8. // 线程池为无限大,当执行第二个任务时第一个任务已经完成,会复用执行第一个任务的线程,而不用每次新建线程。
  9. // 这里如果去除sleep,则你会发现在这个循环中创建了新的线程,因为前一个任务没有执行完,所以创建新线程执行下一个任务。
  10. ExecutorService newCachedThreadPool = Executors.newCachedThreadPool();
  11. for (int i = 0; i < 10; i++) {
  12. final int index = i;
  13. try {
  14. Thread.sleep(10);
  15. } catch (InterruptedException e) {
  16. e.printStackTrace();
  17. }
  18. newCachedThreadPool.execute(new Runnable() {
  19. public void run() {
  20. System.out.println(Thread.currentThread().getName() + "----" + index);
  21. }
  22. });
  23. }
  24. // 创建一个定长的线程池,也是根据需要去调用线程,比如线程定为100个,而循环只有10个,那么也只会用到前10个进程。
  25. ExecutorService newFixedThreadPool = Executors.newFixedThreadPool(100);
  26. for (int i = 0; i < 10; i++) {
  27. final int index = i;
  28. newFixedThreadPool.execute(new Runnable() {
  29. public void run() {
  30. // Thread.sleep(1000);
  31. System.out.println(Thread.currentThread().getName() + "----" + index);
  32. }
  33. });
  34. }
    // ---------------------------------------------------------------------------------------------------
  35. // 创建一个定长线程池,支持定时及周期性任务执行。
  36. ScheduledExecutorService newScheduledThreadPool = Executors.newScheduledThreadPool(5);
  37. for (int i = 0; i < 10; i++) {
  38. newScheduledThreadPool.schedule(new Runnable() {
  39. public void run() {
  40. System.out.println(Thread.currentThread().getName() + "----delay 3 seconds");
  41. }
  42. }, 3, TimeUnit.SECONDS);
  43. }
  44. // 按顺序来执行线程任务 但是不同于单线程,这个线程池只是只能存在一个线程,这个线程死后另外一个线程会补上。
  45. ExecutorService newSingleThreadExecutor = Executors.newSingleThreadExecutor();
  46. for (int i = 0; i < 10; i++) {
  47. final int index = i;
  48. newSingleThreadExecutor.execute(new Runnable() {
  49. public void run() {
  50. System.out.println(Thread.currentThread().getName() + "----" + index);
  51. }
  52. });
  53. }
  54. }
  55. }

 

版权声明:本文为nongzihong原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/nongzihong/p/10523379.html