线程池

什么是线程池

                 一个用来建立线程和管理线程的容器对象。

 

 线程池的好处

                减少资源的消耗,避免频繁的创建与摧毁线程(因为创建线程需要资源)

                提高程序的响应速度 (程序运行速度更加快)

                提高线程的可管理性(需要线程的时候不用创建,直接找线程池要)

 

  如何获得线程

                通过Executors类的静态方法来获取线程池对象,

//通过Executers的静态方法newFixedThreadPool获取指定线程数量的线程池  3表示我获取的这个线程池里面只有3个线程
        ExecutorService executorService = Executors.newFixedThreadPool(3);

        

  ExecutorService接口的经用方法介绍

Future<?>   submit(Runnable  task)提交一个Runnable任务
Future<T>   submit(Callable<T>  task)提交一个Callable任务
void  shutdown()销毁这个线程池,要等所有线程执行完成任务才销毁
void   shutdownNow();销毁这个线程池,不管有没有线程在执行任务,调用该方法立即销毁

 

   submint重载方法区别

                 参数区别

                       第一个方法参数为一个Runnable接口实现类,抽象方法为run方法没有返回值

                       第二个方法参数为一个Callable接口实现类,抽象方法call方法有返回值

 

                 方法返回值区别

                       如果调用submint方法传入的参数为Runnable实现类一般不接收方法的返回值

                        如果调用submint方法传入的参数为Callable的实现类一般接收方法的返回值

 

                submint方法什么时候传入Runnable的实现类什么时候传入Callable的实现类

                        当你运行的这个线程有返回值就使用传入Callable接口实现类的那个方法,当你运行的那个线程没有返回值就使用传入Runnable接口实现类的那种方式,因为传入的参数为Callable的实现类我们可以通过submint方法的返回值获取到那一个线程的返回值。

             

  使用线程池代码         

public static void main(String[] args) throws ExecutionException, InterruptedException {
        //通过Executers的静态方法newFixedThreadPool获取指定线程数量的线程池  3表示我获取的这个线程池里面只有3个线程
        ExecutorService executorService = Executors.newFixedThreadPool(3);
         
               //开启一个线程  线程执行Runnable接口实现类里面的代码
        executorService.submit(new Runnable() {
            @Override
            //重写run方法
            public void run() {
                for (int i = 0; i < 10; i++) {
                    System.out.println("run方法" +i);
                }
            }
        });
         //开启线程  线程执行Callable实现类里面的代码   泛型为call方法的返回值类型
        Future<Integer> submit = executorService.submit(new Callable<Integer>() {
            @Override
            //重写call方法
            public Integer call() throws Exception {
                for (int i = 0; i < 10; i++) {
                    System.out.println("call方法  " + i);
                }
                //方法返回0
                return 0;
            }
        });
               //获取并打印call方法的返回值
        System.out.println(submit.get());

    }

            

  使用lambda表达式作为参数参数传入submit方法

 

  public static void main(String[] args){
        //获取一个线程池对象,并且设置线程池里面的线程数量为5
        ExecutorService executorService = Executors.newFixedThreadPool(5);
        //获取一个线程执行任务    参数为runnable的lambert表达式表现形式   
        executorService.submit(()->{
            for (int i = 0; i < 10; i++) {
                System.out.println("run方法   " +i);
            }
        });
        //  方法返回值泛型为call方法的返回值类型  获取一个线程执行任务   参数为Callable实现类的lambert表达式的表现形式
         Future<Integer> future = executorService.submit(()->{
            for (int i = 0; i < 10; i++) {
                System.out.println("call方法  " +i);
            }
            //返回一个2
            return 2;
        });
         //获取并打印call方法的返回值
        System.out.println(future);
    }

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值