package com.ctx.controller;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.ctx.bean.Achievement;
import com.ctx.bean.Student;
import com.ctx.service.StudentService;
@RestController
public class StudentController {
@Autowired
private StudentService studentService;
//单线程串行执行
@GetMapping("/studentInfo")
public String studentInfo(Long no) {
//开始时间
Long startTime = System.currentTimeMillis();
//查询学生成绩
Achievement achievement = studentService.findAchievementByNo(no);
//查询学生基本信息
Student student = studentService.findStudentByNo(no);
String achievementStr = JSON.toJSONString(achievement);
String studentStr = JSON.toJSONString(student);
JSONObject achievementJson = JSONObject.parseObject(achievementStr);
JSONObject studentJson = JSONObject.parseObject(studentStr);
JSONObject jsonObject = new JSONObject();
jsonObject.putAll(achievementJson);
jsonObject.putAll(studentJson);
String result = jsonObject.toString();
//结束时间
Long endTime = System.currentTimeMillis();
Long diffTime=endTime-startTime;
System.out.println("代码执行时间:"+diffTime);
return result;
}
//多线程并行执行
@GetMapping("/studentInfo2")
public String studentInfo2(Long no) {
//开始时间
Long startTime = System.currentTimeMillis();
//学生成绩
Callable<JSONObject> achievementJSON = new Callable<JSONObject>() {
@Override
public JSONObject call() throws Exception {
Achievement achievement = studentService.findAchievementByNo(no);
String achievementStr = JSON.toJSONString(achievement);
JSONObject achievementJson = JSONObject.parseObject(achievementStr);
return achievementJson;
//return null;
}
};
//学生基本信息
Callable<JSONObject> studentJSON = new Callable<JSONObject>() {
@Override
public JSONObject call() throws Exception {
//查询学生基本信息
Student student = studentService.findStudentByNo(no);
String studentStr = JSON.toJSONString(student);
JSONObject studentJson = JSONObject.parseObject(studentStr);
return studentJson;
}
};
FutureTask<JSONObject> achievementFutureTask = new FutureTask<JSONObject>(achievementJSON);
FutureTask<JSONObject> studentFutureTask = new FutureTask<JSONObject>(studentJSON);
//执行线程
new Thread(achievementFutureTask).start();
new Thread(studentFutureTask).start();
JSONObject jsonObject = new JSONObject();
try {
//get()阻塞监听call()方法的返回值。
jsonObject.putAll(achievementFutureTask.get());
jsonObject.putAll(studentFutureTask.get());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String result = jsonObject.toString();
//结束时间
Long endTime = System.currentTimeMillis();
Long diffTime=endTime-startTime;
System.out.println("代码执行时间:"+diffTime);
return result;
}
}