亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于多線程請求下的springmvc的controller單例的問題

關于多線程請求下的springmvc的controller單例的問題

楊__羊羊 2019-01-18 16:27:03
1.springmvc模式下裝載的實體都是單例模式。那單例中變量共享,測試共享變量在多個線程請求下回共享。但是類中函數方法卻沒有阻塞?各路神仙解釋下原因唄?
查看完整描述

4 回答

?
三國紛爭

TA貢獻1804條經驗 獲得超7個贊

引用我之前的回答---------
我個人認為是你把單例和線程安全搞混了,單例并不意味著線程安全,多線程同時訪問單例同樣存在并發問題,除非你手動加鎖。下面通過一個例子說明,你覺得最后 count 會是多少?

public class Demo {
    private int count;

    public void add() {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        this.count++;
    }

    public static void main(String[] args) {
        Demo d = new Demo();

        // 8個線程同時訪問同一個 demo
        new Thread(() -> {d.add();}).start();
        new Thread(() -> {d.add();}).start();
        new Thread(() -> {d.add();}).start();
        new Thread(() -> {d.add();}).start();
        new Thread(() -> {d.add();}).start();
        new Thread(() -> {d.add();}).start();
        new Thread(() -> {d.add();}).start();
        new Thread(() -> {d.add();}).start();

        // 主線程休眠 2 s ,等其他線程執行結束
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(d.count);
    }
}
查看完整回答
反對 回復 2019-03-01
?
縹緲止盈

TA貢獻2041條經驗 獲得超4個贊

單例和阻塞沒有直接關系;阻塞是并發時對訪問資源的安全控制手段;常規的可以通過同步關鍵字、lock、線程局部變量等手段來實現;
單例是一種設計模式,粗淺理解就是為了減少創建實例帶來的系統資源的損耗。

查看完整回答
反對 回復 2019-03-01
?
Helenr

TA貢獻1780條經驗 獲得超4個贊

單例又不是單線程

查看完整回答
反對 回復 2019-03-01
  • 4 回答
  • 0 關注
  • 596 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號