zoukankan      html  css  js  c++  java
  • 46 线程池中 submit() 和 execute() 方法有什么区别?

    线程池中 submit() 和 execute() 方法有什么区别?

    答:

    submit() 和 execute()都可以开启线程执行池中的任务。但是 submit()可以提交指定的任务去执行并且返回Future对象,即执行的结果。

    区别:

    1. 接收的参数不一样
    public class MainTest {
    
        public static void main(String[] args) throws Exception {
            ExecutorService pool = Executors.newFixedThreadPool(10);
            pool.execute(new Runnable() {
                @Override
                public void run() {
                    System.out.println("execute");
                }
            });
    
            Future<?> submit = pool.submit(new Runnable() {
                @Override
                public void run() {
                    System.out.println("submit");
                }
            });
            //等任务执行完毕会打印null
            System.out.println(submit.get());
    
            FutureTask<Integer> submit2 = (FutureTask<Integer>) pool.submit(new Callable<Integer>() {
                @Override
                public Integer call() throws Exception {
                    System.out.println("submit_2");
                    return 2;
                }
            });
            System.out.println("result=" + submit2.get());
        }
    
    }
    

     

    1. 返回值不一样
    • submit有Future < T > 类型的返回值,而execute没有。
    1. submit方便Exception处理
    • 感知这些exception并做出及时的处理,那么就需要用到submit,通过捕获Future.get抛出的异常。
    public class MainTest {
    
        public static void main(String[] args) throws Exception {
            ExecutorService pool = Executors.newFixedThreadPool(10);
    
            Future submit = pool.submit(new Runnable() {
                @Override
                public void run() {
                    System.out.println("submit");
                    System.out.println(0/0);
                }
            });
            try {
                System.out.println("result=" + submit.get());
            }catch (Exception e){
                System.out.println(e);
            }
        }
    
    }
    

     

    原文链接: https://www.baidu.com/link?url=mSM6YA2dSJU1EyYcj0U9po553ZwsICJgHeLncKMVuywh0bSgd2RRj8yNSLTW-Vgy&wd=&eqid=dc13d939001ee18a000000065eb1e9a8

  • 相关阅读:
    Jenkins的安装
    nginx的正则
    nginx的详解(四)
    nginx的详解(三)
    nginx的详解(二)
    Linux基础(七)
    linux-syslog服务
    Django中使用Oracle数据库
    django-admin-simpleui
    closewait---文件描述符
  • 原文地址:https://www.cnblogs.com/ynzj123/p/12834163.html
Copyright © 2011-2022 走看看