同一时刻只能有一条线程在CPU上执行?

来源:4-2 Java线程交互之能量损失之谜:争用条件

qq_陪Alice度过漫长岁月

2018-03-01 15:36

1.我们所学习多线程不就是为了让多条线程并发在服务器上执行,加快处理某些业务的等待时间吗,可章节4-2中3:06说的观点怎么感觉不对劲呢。

2.再提一个问题,多线程执行的过程中,每一条线程执行的速度效率都不一致才是导致数据被破坏的原因吧

http://img2.mukewang.com/5a97ad1d00016c2715220819.jpg

写回答 关注

2回答

  • 浩瀚银汉
    2018-03-01 16:15:31
    已采纳

    第一个问题:并发时的时刻其实指的是某个很短的时间,当系统只有一个内核时,系统在某个时刻确实只能执行一个线程,大多数系统都用的是时间片轮换算法,就是多个进程在分配到的极短时间片轮流使用CPU,详情可以看看计算机操作系统这类书,都有具体介绍

    第二个问题,按照我的理解是这样的,用这个举例吧

     http://img4.mukewang.com/5a97b5c5000185c005580327.jpg



    正确执行时:

    线程1:c=5000,a=5000;a=a+500=5500;c=a

    线程2: c=5500;c=c+900=6400,结果是6400

    争用时:

    线程1:c=5000,a=5000;a=a+500=5500;

    线程2:c=5000;c=c+900=5900;

    线程1:c=a,结果是5500

    线程2与线程1争用资源,导致c损失900;


    qq_陪Al...

    万分感谢!看你的回答按照你的思路再走一遍就通了。 这里的意思就是当 线程A没有执行完毕,线程B就load共享对象了 如果线程B执行速度稍快,那么线程B执行完后,A才走到将改变值写会当前变量的时候 那么共享变量这时候的两个操作,最终值就和业务对不上了 刚刚饶进去了,赞一个!

    2018-03-01 17:48:43

    共 1 条回复 >

  • 慕瓜3258604
    2018-03-02 15:21:24

    没有看懂

深入浅出Java多线程

带你一起深入浅出多线程,掌握基础,展望进阶路线

186088 学习 · 464 问题

查看课程

相似问题