results音标怎么读,resultset会返回所有对象吗

  

  执行者框架允许并发地执行任务而无须考虑线程创建和执行问题。它还提供了将来的类,以获取提交到执行器中的任意任务的状态和返回结果。   

  

  若开发者想要等待某个任务执行完毕,可以使用如下手段。   

  

  当任务执行完毕后,未来接口中的isDone()方法会返回没错ThreadPoolExecutor类中的awaitTermination()方法会让当前线程进入休眠,直到调用关机()方法后所有的任务执行完毕。这两种方法都有一定的缺陷:第一种方法只能获取任务的完成状态;第二种方法必须关闭执行器来处理一个线程。   

  

  ThreadPoolExecutor类提供了一个方法可以提交一个任务列表到执行器中,并等待列表内的全部任务执行完毕。本节将在一个包含10 个任务和打印其运行结果的例子中,了解到如何使用这一特性。   

  

  包invokeAll导入Java。util。ArrayList导入Java。util。列表;导入Java。util。并发。*;公共类结果{私有字符串名称;私有int值;公共字符串getName(){ return name;} public void set name(String name){ this。name=名称;} public int getValue() {返回值;} public void setValue(int value){ this。值=值;}公共静态类任务实现可调用结果{私有最终字符串名称;公共任务(字符串名称){ this.name=name}/* * * * @作者wj * @描述随机暂停,构建一个结果对象,并返回* @ Date 18:35 2022/5/27 * @ Param * @ return invoke all .结果* */@覆盖公共结果调用()抛出异常{系统。出去。printf(' % s : stamping \ n ',此。姓名);试试{长持续时间=(长)(数学。random()* 10);System.out.printf('%s:等待%d秒的结果. \n ',this.name,duration);时间单位9.25秒. sleep(时长);} catch(中断异常e){ e . printstacktrace();} int value=(int)(数学。random()* 100);结果Result=新结果();结果。设置名称(this。姓名);result.setValue(值);系统。出去。println(这个。名‘: Ends’));返回结果;} } public static void main(String args){ ExecutorService executor=(ExecutorService)Executors .newCachedThreadPool();//创建10个工作对象list task任务列表=new ArrayList();for(int I=0;i 10i ) {任务任务=新任务('任务-'我);taskList.add(任务);} ListFutureResult结果列表=null尝试{ //调用ThreadPoolExecutor类中的invokeAll()方法,返回结果会传给之前创建的将来的对象列表结果列表=执行者。调用全部(任务列表);} catch(中断异常e){ e . printstacktrace();} //调用关机()方法来终止执行器executor.shutdown().System.out.println('Main:打印结果');//打印将来的对象列表中存储的执行结果for(int I=0;一.结果列表。size();I){未来结果future=结果列表。get(I);试试{ Result结果=未来。get();系统。出去。println(结果。getname()“:”结果。getvalue());} catch(中断异常|执行异常e){ e . printstacktrace();} } }}结果分析   

  

  本节讲述了如何提交一个任务列表给执行器,并调用invokeAll()方法等待全部任务执行完成。该方法接收一个请求即付的对象列表作为参数,返回一个将来的对象列表。在列表中,每个任务都对应着一个将来的对象。   

  

  未来列表中的第一个未来对象对应于可调用列表中的第一个任务,第二个未来对象对应第二个任务,依此类推。重要的一点是,在声明一个存储返回结果的列表时,列表中的Future对象需要根据方法传入的可调用对象的泛型类型来确定Future接口的泛型类型。在这种情况下,两者的泛型类型都是结果类。   

  

  invokeAll()方法的另一个重要点是,Future对象只用于获取任务的返回结果。当所有任务被执行时,该方法结束。如果您尝试调用返回未来对象的isDone()方法,所有调用都将返回true。   

相关文章