有个请求是操作是比较耗时,我想在controller方法里新开启一个线程去单独处理耗时的那部分操作。这样做会不会导致线程安全的问题?
//类似于这样的代码
@PostMapping("/audit")
public Object audit(@RequestBody Data data){
JSONObject jsonObject = new JSONObject();
Result result = serviceA.a(data);
if(result!=null){
jsonObject.put("code",200);
jsonObject.put("data",result);
jsonObject.put("message","审核成功");
jsonObject.put("success",true);
//耗时操作
Thread t=new Thread(new Runnable() {
@Override
public void run() {
try {
serviceA.b(result);
System.out.println("耗时操作");
} catch (Exception e) {
e.printStackTrace();
}
}
});
t.start();
}else {
jsonObject.put("code",400);
jsonObject.put("message","审核失败");
jsonObject.put("success",false);
}
return jsonObject;
}
6 回答
宝慕林4294392
TA贡献2021条经验 获得超8个赞
serviceA.b(result); 会不会修改 result,如果会的话,那么 HTTP的输出是不确定的。如果不会修改,那么是没有问题的
繁花不似锦
TA贡献1851条经验 获得超4个赞
如果Result是不可变的,就不会有问题。否则最好是拷贝一份给线程用,原来那份输出到jsonObject中。
另外,实际应用中最好用线程池代替Thread
类。
添加回答
举报
0/150
提交
取消