この記事では、主にJava Concurrentプログラミングが呼ばれる将来のプログラミングの使用を調査し、関連する例コードを共有し、詳細は次のとおりです。
私たちは皆、マルチスレッドを実装する2つの方法があることを知っています。 1つはスレッドを継承することであり、もう1つは実行可能な実装です。ただし、これらの2つの方法の両方に欠陥があり、タスクが完了した後に戻り結果を取得することはできません。返品結果を取得するには、Callableを使用する必要があります。呼び出し可能なタスクには返品値を持つことができますが、呼び出し可能なタスクから返品値を直接取得することはできません。呼び出し可能なタスクの返品値を取得したい場合は、将来を使用する必要があります。したがって、呼び出し可能なタスクと将来のモードは通常、組み合わせて使用されます。
シナリオを想像してみてください。投稿リストインターフェイスが必要です。投稿リストを返すことに加えて、各投稿の類似リストとコメントリストを返す必要もあります。ページ上の10の投稿を計算するには、このインターフェイスではデータベースへのアクセスが21回必要です。データベースにアクセスすると、100ms、21回に基づいて計算され、累積時間は2.1秒です。この応答時間はおそらく不十分です。何をするか?インターフェイスの非同期変換。
投稿リストを見つけた後、投稿リストを繰り返し、ループ内の10個のスレッドを開始し、各投稿の同様のリストを同時に取得し、同時に10個のスレッドを設定して各投稿のコメントリストを取得します。この変換の後、インターフェイスの応答時間は200ミリ秒に大幅に短縮されます。現時点では、Callabelを使用してFutureを使用してそれを達成する必要があります。
プライベートリスト<Posttresponse> createPostResponselist(page <postresponse> page、final string userid){if(page.getount()== 0 || page == null || page.getList()== null){return null; } //投稿リストを取得<Posttresponse> circleresponselist = page.getList(); int size = circleresponselist.size(); executorservice commentpool = executors.newfixedthreadpool(size); executorservice supportpool = executors.newfixedthreadpool(size); {list <future> commentfuturelist = new arrayList <future>(size); if(circleresponselist!= null && circleresponselist.size()> 0){for(posttresponse postresponse:circleresponselist){final string cirstresponse.getid();最終文字列postuserid = postresponse.getuserid(); //コメントリストを確認します<リスト<リスト<circlereviews >> callablecomment = new callebable <list <circlereviews >>(){@override public list <circlereviews> call()throws {return circlereviewsbiz.getpostcomments(cirstrid); }};将来のf = commentpool.submit(callablecomment); commentfuturelist.add(f); //類いいリストを確認します<リスト<circlezan >> callablesupport = new callable <list <circlezan >>(){@override public list <circlezan> call()throws exception {return circlezanbiz.findlist(cirstrid); }}; Future SupportFuture = supportpool.submit(callablesupport); commentfuturelist.add(supportfuture); }} //すべての同時タスクの実行結果を取得int i = 0;後腹部temp = null; for(future f:commentfuturelist){temp = circleresponselist.get(i); temp.setcommentList((list <circlereviews>)f.get(); temp.setsupportlist((list <circlezan>)f.get(); circleresponseList.set.set.set(i、temp);}} catch(exception e){e.printstacktrace();}} conty { /} supportpool.shutdown();要約します
上記は、Java Concurrentプログラミングのアプリケーションの例コードコール可能かつ将来のこの記事の内容全体です。私はそれが誰にでも役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!