submit()方法最终调用线程池的execute()方法,而execute()方法会创建出"工人"Worker对象,调用runWorker()方法,它主要是执行外部提交的任务,也就是这里的FutureTask对象的run()方法, 我们重点看下run...
submit public Future submit(Runnable task,T result) 提交一个 Runnable 任务用于执行,并返回一个表示该任务的 Future。该 Future 的 get 方法在成功完成时将会返回给定的结果。 指定者: 接口 ExecutorService 中的 submit 参数: task - 要提交的任务 result - 返回的结果 返回: 表示任务等待完成的 Futuresubmit ...
execute和submit都是线程池中执行任务的方法。 execute是Executor接口中的方法 publicinterfaceExecutor{voidexecute(Runnable command); } submit是ExecuteService接口中的方法。 public interface ExecutorService extends Executor {<T>Future<T>submit(Callable<T>task);<T>Future<T>submit(Runnable task, T result); F...
}publicstaticvoidtestThreadPoolExecutor()throwsException {//基础参数intcorePoolSize=2;//最小活跃线程数intmaximumPoolSize=5;//最大活跃线程数intkeepAliveTime=5;//指定线程池中线程空闲超过 5s 后将被回收TimeUnit unit = TimeUnit.SECONDS;//keepAliveTime 单位//阻塞队列BlockingQueue<Runnable> workQueue ...
ExecutorService接口继承了Executor,在其上做了一些shutdown()、submit()的扩展,可以说是真正的线程池接口; AbstractExecutorService抽象类实现了ExecutorService接口中的大部分方法; ThreadPoolExecutor是线程池的核心实现类,用来执行被提交的任务。 ScheduledExecutorService接口继承了ExecutorService接口,提供了带"周期执行"功能Exe...
submit()和execute()都是用于提交任务到线程池中执行的方法,但是二者有以下不同:submit()方法可以接受...
3、队列策略 线程池通常会使用队列来保存已提交但未处理的任务。线程池如何使用这个队列,被称为队列策略。通过submit()方法提交的任务,会被添加到阻塞队列中,并保留之前提交的任务执行顺序。而对于execute()方法提交的任务,将会被添加到队列的尾部。这意味着队列中的第一个任务是最早的任务并且先被执行。4、任务...
submit(() -> { while (true) { // 消费数据 consumeData(queue.take()); } }); } 5.2 多线程环境下阻塞队列的使用注意事项 在使用阻塞队列时,要注意线程的中断策略。在等待插入或移除操作的阻塞过程中,线程可能会被中断,正确的中断处理策略可以避免资源泄露或者不一致的状态。以下是处理中断的一种推荐方法...
execute()接受runnable 无返回值,所以无法判断任务是否被线程池执行成功。 2、submit()方法用于提交需要返回值的任务 线程池会返回一个future类型的对象,通过这个future对象可以判断任务是否执行成功,并且可以通过future的get()方法来获取返回值,get()方法会阻塞当前线程直到任务完成,而使用get(long timeout,TimeUnit uni...