为了账号安全,请及时绑定邮箱和手机立即绑定

关于多线程请求下的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 关注
  • 603 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号