java並發請求多個接口,順序返回


最近有個需求,從一個api拿數據,但是api時間參數又有范圍限制,因此需要自己將時間分成多段,多次請求api,並且最終返回的數據需要保持原有的順序

代碼如下:

package com.test001.www.threadpool;

import java.util.LinkedList;
import java.util.List;
import java.util.Vector;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class ThreadPoolTest {

    public static void main(String[] args){
        ArrayThreadPool<User> pool = new ArrayThreadPool<>();
        for (int i = 5; i > 0; i--){
            Integer data = i;
            pool.submit(()->{
         //這個地方可以寫一個函數,參數可以從外層傳入 System.out.println(
"網絡操作開始"+data); Thread.sleep(data*1000); System.out.println("網絡操作結束"+data); return new User(data); }); } List<User> users = pool.get(); for (User u :users){ System.out.println(u); } pool.stop(); } } class User{ private int i; public User(int a){ i=a; } @Override public String toString() { return "user="+i; } } class ArrayThreadPool<T>{ private Vector<Future<T>> futureList = new Vector<>(); ExecutorService executor = Executors.newCachedThreadPool(); public ArrayThreadPool submit(Callable<T> task){ Future<T> result = executor.submit(task); futureList.add(result); return this; } public List<T> get(){ List<T> result = new LinkedList<>(); for (Future<T> future : futureList) { try { result.add(future.get()); }catch (Exception e){ result.add(null); } } return result; } public void stop(){ executor.shutdown(); } }

使用java自帶線程池實現


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM