在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ 默認的單例的Controller如何保證里面的Service是線程安全的?

默認的單例的Controller如何保證里面的Service是線程安全的?

@Controller
public class MyController {


    @Autowired
    MyService service;

    @RequestMapping("/test")
    @ResponseBody
    public String hello() {
        service.save();
        return "h";
    }
}

service也是單例的,會不會有線程安全問題?
回答
編輯回答
大濕胸

service為單例的,是否存在線程安全問題主要取決于service本身。

  1. service方法為線程安全,則整體為線程安全
    我們寫業(yè)務方法的時候,一般從redis或db中獲取業(yè)務數(shù)據(jù),然后在數(shù)據(jù)上進行操作,最后將變更寫回到redis或db,這種情況下,并發(fā)問題由底層存儲保障(redis、MySQL)
  2. service方法為非線程安全,則為非線程安全
    如果在業(yè)務操作中,需要保留內(nèi)存對象,比如在service中存在共享對象,就比較麻煩了,情況比較多。如果共享對象在請求級別有效,可以在每次請求的時候創(chuàng)建新的service對象;如果共享對象跨越多個請求,則需要選擇線程安全的實現(xiàn),將service方法改造為線程安全

看你這種情況,service.save應該是把對象直接存于數(shù)據(jù)庫,不會有線程安全問題,并發(fā)問題全部交給了db管理。

2018年4月30日 06:01