泼墨画丹青 2018-08-14 11:14 采纳率: 28.6%
浏览 3067
已采纳

既然cpu同一时间只能执行一个线程,为什么还会出现并发问题

假设两个请求同时请求controller,进行减库存操作,在数据库中判断库存>=0才进行减库存,这时候不是不存在两个线程同时进行update操作为什么库存很多时候还是会小于0

  • 写回答

9条回答 默认 最新

  • _zming 2018-08-14 11:37
    关注

    你没理解并发,方法问题是线程之间的问题,跟cpu没有关系,但cpu也可以使用多线程,只是单cpu进行多线程并不会提高执行速度,甚至还会降低速度
    ,因为有线程上下文的切换开销,多cpu下的多线程才会翻倍提高。
    那并发问题为什么会出现,更cpu没关系,而是跟线程切换有关,举例如下

    if(i ==1) {
    //执行点1
    i++;
    System.out.pint(i)
    }//执行点2
    假如线程A和线程B同时执行上面的代码,当线程A到达执行点2时,cpu进行时间片到期会切换到线程B,去执行线程B,此时线程B执行到If语句
    发现i不等于1,则不会调用system。out这是正常的。
    但是:如果现程A到达执行点1时时间片到期,于是i++还没有执行,此时线程B执行if语句发现条件为true并调用了system。out。当线程B执行完后
    线程A继续执行点1后继续执行,于是system.out被执行了两次,这就是并发问题。所有并发问题与cpu无关,与线程切换有关

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(8条)

报告相同问题?

悬赏问题

  • ¥15 手机连接电脑热点显示无ip分配
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大