JAVA 线程池ThreadPoolExecutor 提交执行方式(execute,submit)

JAVA线程池提交方式 execute和 submit 两种提交执行的方式,那他们有什么区别?
execute里面中的参数 是一个必须实现 Runnable 接口的实现类。从源码中我们就可以看出:

 public void execute(Runnable command) {
        if (command == null)
            throw new NullPointerException();
            }

在一般情况下,我们可以直接使用 这个去执行,实现多线程,但是要注意,实现方式不能出现串行化,这个方式提交是不会有返回值的,线程不会异步的去返回参数,这在一些需要接收返回值的业务场景下面就有一点难受,这时候我们就需要使用 submit去提交执行线程。

submit:这个方法接收的参数可以是 Runnable 的实现类,也可以是Callable的实现类
在这里插入图片描述
Callable 这个就是我们要实现的关键所在,这个接口会异步的返回值,这样就可以实现我们的场景了,看下实例

public class CarPdfCallable  implements Callable {

    @Override
    public String call() throws Exception {
        String file = "";
        return file;
    }
}

这里返回的是一个String 类型,这里可以根据自己的类型替换,泛型,
那我们得到的值会是 Future 这样的函数,这里我们可以去调用 get返回去获取我们的返回值,这里要注意,这个方法是阻塞的,执行就会等待,如果我们在循环中直接使用 ,那么多线程也就没有意义了。

你可能感兴趣的:(并发编程,并发编程)