@Service
public class UserService {
@Autowired
private RemoteService remoteService;
static ExecutorService executorService = Executors.newFixedThreadPool(10);
public Object getUserInfo(String userId) throws Exception{
long currentTime=System.currentTimeMillis();
//这里因为是串行执行,所以使用多线程,又因为有返回值,所以用Calleble
Callable<JSONObject> callableUser = new Callable<JSONObject>(){
@Override
public JSONObject call() throws Exception {
String userInfo = remoteService.getUserInfo(userId);
JSONObject userObject = JSONObject.parseObject(userInfo);//{1,2,3}
return userObject;
}
};
Callable<JSONObject> callableMoney = new Callable<JSONObject>(){
@Override
public JSONObject call() throws Exception {
String userMoney = remoteService.getUserMoney(userId);
JSONObject moneyObject = JSONObject.parseObject(userMoney);//{4,5,6}
return moneyObject;
}
};
System.out.println("用的总时间是+"+(System.currentTimeMillis()-currentTime));
FutureTask<JSONObject> futureTask1 = new FutureTask<JSONObject>(callableUser);
FutureTask<JSONObject> futureTask2 =new FutureTask<JSONObject>(callableMoney);
/*new Thread(futureTask1).start();
new Thread(futureTask2).start();//用线程启动耗时秒钟左右
*/
executorService.submit(futureTask1);
executorService.submit(futureTask2);//用线程池启动耗时2秒
JSONObject result =new JSONObject();
result.putAll(futureTask1.get()); //这里的get是一个阻塞的方法
result.putAll(futureTask2.get()); //{1,2,3,4,5,6}
return result;