image.png
    image.png

    /*
    __
    创建线程的方式四:使用线程池
    *
    * __好处:

    * 1.提高响应速度(减少了创建新线程的时间)
    2.降低资源消耗(重复利用线程池中的线程,不需要每次都创建)
    __
    3.便于线程管理
    * corePoolSize:核心池的大小
    maximumPoolSize:最大线程数
    __
    keepAliveTime:线程没有任务是最多保持多长时间后会终止
    __*

    _

    1. package com.atguigu.java3;
    2. import java.util.concurrent.ExecutorService;
    3. import java.util.concurrent.Executors;
    4. /**
    5. * 创建线程的方式四:使用线程池
    6. *
    7. * 好处:
    8. * 1.提高响应速度(减少了创建新线程的时间)
    9. * 2.降低资源消耗(重复利用线程池中的线程,不需要每次都创建)
    10. * 3.便于线程管理
    11. * corePoolSize:核心池的大小
    12. * maximumPoolSize:最大线程数
    13. * keepAliveTime:线程没有任务是最多保持多长时间后会终止
    14. *
    15. * @author Dxkstart
    16. * @create 2021-05-08 17:20
    17. */
    18. public class Threadpool {
    19. public static void main(String[] args) {
    20. //1.提供指定线程数量的线程池
    21. ExecutorService service = Executors.newFixedThreadPool(10);
    22. //2.执行指定的线程的操作。需要提供实现Runable接口或Callable接口实现类的对象
    23. service.execute(new NumberThread());//适合使用于Runnable
    24. service.execute(new NumberThread1());//适合使用于Runnable
    25. // service.submit(Callable callable);//适合使用于Callable
    26. //3.关闭连接池
    27. service.shutdown();
    28. }
    29. }
    30. class NumberThread implements Runnable{
    31. @Override
    32. public void run() {
    33. for (int i = 0;i <= 100;i++){
    34. if(i % 2 == 0){
    35. System.out.println(Thread.currentThread().getName()+ ":"+i);
    36. }
    37. }
    38. }
    39. }
    40. class NumberThread1 implements Runnable{
    41. @Override
    42. public void run() {
    43. for (int i = 0;i <= 100;i++){
    44. if(i % 2 != 0){
    45. System.out.println(Thread.currentThread().getName()+ ":"+i);
    46. }
    47. }
    48. }
    49. }