使用ExecutorServiceexecutorServiceExecutors.newFixedThreadPool(10);FutureIntegerfutureexecutorService.submit(()-{// 执行一些计算任务Class?clazzClass.forName(com.example.demo.dao.ItemDao);System.out.println(Task executed by thread: Thread.currentThread().getName());return42;});Objectofuture.get();System.out.println(Result from task: o);executorService.shutdown();上述代码首先创建了一个固定核心线程数最大线程数大小的线程池。然后调用ExecutorService的submit方法执行一个有返回值的callable任务该方法返回一个实现Future接口的对象。然后通过future.get()方法获取任务的执行结果。最后关闭线程池。第一行解读publicstaticExecutorServicenewFixedThreadPool(intnThreads){returnnewThreadPoolExecutor(nThreads,nThreads,0L,TimeUnit.MILLISECONDS,newLinkedBlockingQueueRunnable());}第一行ExecutorService executorService Executors.newFixedThreadPool(10);调用了Executors的newFixedThreadPool方法。该方法调用线程池的构造函数创建ThreadPoolExecutor对象。核心线程数和最大线程数均为nThreads。非核心线程存活时间为0L单位为毫秒。任务队列为LinkedBlockingQueue。3. submit方法解读publicTFutureTsubmit(CallableTtask){if(tasknull)thrownewNullPointerException();RunnableFutureTftasknewTaskFor(task);execute(ftask);returnftask;}该方法传入要执行的任务task。使用newTaskFor将task封装为RunnableFuture对象。然后调用execute方法执行任务task。该处execute方法调用的是线程池的execute的方法。task的返回值会被赋值给FunnableFuture中的outcome变量。用户使用future.get()方法时会获取到outcome的值。future.get()方法详解publicVget()throwsInterruptedException,ExecutionException{intsstate;if(sCOMPLETING)sawaitDone(false,0L);returnreport(s);}该方法关键逻辑为report方法。privateVreport(ints)throwsExecutionException{Objectxoutcome;if(sNORMAL)return(V)x;if(sCANCELLED)thrownewCancellationException();thrownewExecutionException((Throwable)x);}report方法根据任务task执行的状态返回outcome或者异常。
Future接口学习
发布时间:2026/5/25 4:56:33
使用ExecutorServiceexecutorServiceExecutors.newFixedThreadPool(10);FutureIntegerfutureexecutorService.submit(()-{// 执行一些计算任务Class?clazzClass.forName(com.example.demo.dao.ItemDao);System.out.println(Task executed by thread: Thread.currentThread().getName());return42;});Objectofuture.get();System.out.println(Result from task: o);executorService.shutdown();上述代码首先创建了一个固定核心线程数最大线程数大小的线程池。然后调用ExecutorService的submit方法执行一个有返回值的callable任务该方法返回一个实现Future接口的对象。然后通过future.get()方法获取任务的执行结果。最后关闭线程池。第一行解读publicstaticExecutorServicenewFixedThreadPool(intnThreads){returnnewThreadPoolExecutor(nThreads,nThreads,0L,TimeUnit.MILLISECONDS,newLinkedBlockingQueueRunnable());}第一行ExecutorService executorService Executors.newFixedThreadPool(10);调用了Executors的newFixedThreadPool方法。该方法调用线程池的构造函数创建ThreadPoolExecutor对象。核心线程数和最大线程数均为nThreads。非核心线程存活时间为0L单位为毫秒。任务队列为LinkedBlockingQueue。3. submit方法解读publicTFutureTsubmit(CallableTtask){if(tasknull)thrownewNullPointerException();RunnableFutureTftasknewTaskFor(task);execute(ftask);returnftask;}该方法传入要执行的任务task。使用newTaskFor将task封装为RunnableFuture对象。然后调用execute方法执行任务task。该处execute方法调用的是线程池的execute的方法。task的返回值会被赋值给FunnableFuture中的outcome变量。用户使用future.get()方法时会获取到outcome的值。future.get()方法详解publicVget()throwsInterruptedException,ExecutionException{intsstate;if(sCOMPLETING)sawaitDone(false,0L);returnreport(s);}该方法关键逻辑为report方法。privateVreport(ints)throwsExecutionException{Objectxoutcome;if(sNORMAL)return(V)x;if(sCANCELLED)thrownewCancellationException();thrownewExecutionException((Throwable)x);}report方法根据任务task执行的状态返回outcome或者异常。