execute 和 submit 区别: submit 有返回值,execute 没有返回值; 所以说可以根据任务有无返回 值选择对应的方法。 submit 方便异常的处理; 如果任务是实现的Callable接口,会返回值,也可能会抛出异常,而且希望外面的调用者获取返回值能够感知这些异常,那么就需要调用 submit 方法,通过捕获Future.get FutureTask.get方法:...
submit(callable)时,会将callable传给futureTask,执行execute(futureTask)。FutureTask实现了Runnable接口。FutureTask的run方法里会调Callable的call方法。 如果是CPU密集型,核心线程数应该是CPU核心数,最大线程数可以是核心线程数+1,避免线程频繁切换带来的开销。如果是IO密集型,核心线程数可以是CPU核心数的两倍,可以用公式...
745.线程池启动线程 submit()和 execute()方法有什么不同 execute 没有返回值,如果不需要知道线程的结果就使用 execute 方法,性能会好很多。 submit 返回一个 Future 对象,如果想知道线程结果就使用 submit 提交,而且它能在主线程中通过 Future 的 get 方法捕获线程中的异常...
//该方法是向线程池提交runnable任务的方法 public void execute(Runnable command) { //检测参数是否非法 if (command == null) throw new NullPointerException(); //下面开始便上开头说的几种情况 //获取当前存活的线程数 int c = ctl.get(); //1.如果小于核心线程数则直接调用addWorker创建工作线程, //...
1.1 在线程池的实践中,我们一般要通过ThreadPoolExecutor的构造函数来声明线程池,避免使用Executors类创建线程池,否则会有OOM风险,原因如下: FixedThreadPool 和 SingleThreadExecutor : 使用的是无界的 LinkedBlockingQueue,任务队列最大长度为 Integer.MAX_VALUE,可能堆积大量的请求,从而导致 OOM。CachedThreadPool :使用...
void execute(Runnable command); } 1. 2. 3. 4. public interface ExecutorService extends Executor { //这是一个继承了上面接口的类,里面有多个常用的API用来提交任务和中断任务等。 void shutdown(); List<Runnable> shutdownNow(); boolean isShutdown(); ...