package com.day8.test;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;

/**
 * User: Json
 * Date: 2021/8/29
 *  *
 *  *  * 创建线程的 第四种方式 -- jDK5.0新增
 *  * 使用线程池
 *  1. 提供指定的线程数的线程池
 *  2. 执行指定的线程操作,需要提供实现Runnable接口或者Callable实现类的对象
 *
 *  好处
 *  1. 提高响应速度
 *  2. 降低资源消耗
 *  3. 便于线程管理
 * 设置线程属性
 *   CorePoolSize  线程池大小
 *   KeepAliveTime   没有线程任务时 最多保持多久会终止
 *   MaximumPoolSize 最大线程数
 *
 *   面试题 创建多线程几种方式 ?  4种
 **/
class  NumberThread implements  Runnable{
    @Override
    public void run() {
        for (int i=1;i<=100;i++){
            if(i%2==0){
                System.out.println(Thread.currentThread().getName()+":"+i);

            }
        }
    }
}
class  NumberThread1 implements  Runnable{
    @Override
    public void run() {
        for (int i=1;i<=100;i++){
            if(i%2!=0){
                System.out.println(Thread.currentThread().getName()+":"+i);

            }
        }
    }
}
public class ThreadPool {

    public static void main(String[] args) {


        //多态的 对象  造了10个线程池
        ExecutorService executorService = Executors.newFixedThreadPool(10);
        //强制转换 我也不太明白 为了设置线程属性
        ThreadPoolExecutor executorService1 = (ThreadPoolExecutor) executorService;
        //设置线程池的属性
     //   executorService1.setCorePoolSize(15);
       // executorService1.setKeepAliveTime();
      //  executorService1.setMaximumPoolSize();
        executorService.execute(new NumberThread()); //适合使用于Runable
        executorService.execute(new NumberThread1());
   //     executorService.submit(); //适合使用于Callable
        executorService.shutdown();


    }
}