问答详情
源自:4-2 Java线程交互之能量损失之谜:争用条件

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

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

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

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

提问者:qq_陪Alice度过漫长岁月 2018-03-01 15:36

个回答

  • 浩瀚银汉
    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;


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

    没有看懂