假设两个请求同时请求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无关,与线程切换有关本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 7无用