一、加入线程同步的原因

由于同一进程中的所有线程都是共享数据的,如果对线程中共享数据的并发访问不加以限制,结果将不可预期,在严重的情况下,还会产生死锁
在一个进程内的所有线程共享全局变量,能够在不使用其他方式的前提下完成多线程之间的数据共享(这点要比多进程要好)
缺点就是,线程是对全局变量随意遂改可能造成多线程之间对全局变量的混乱(即线程非安全)

二、解决数据混乱的方法

为了让线程是安全的,解决方法:
1、为了解决这个问题,需要允许线程独占地访问共享数据,这就是线程同步。
2、让每个线程拥有一个独立的私有变量
在这里插入图片描述

三、数据混乱示意图

在这里插入图片描述

四、代码实现数据混乱问题

在这里插入图片描述
执行结果为:数据混乱在这里插入图片描述
但是当我把累加次数设置小,就不会出现数据混乱问题
在这里插入图片描述
数据混乱的原因:
cpu分成多个时间片段,启动10线程,分配10个cpu时间片段,当我累加数字设置比较小的时候,在单个cpu时间片段内,for循环代码就执行完,就不会产生数据混乱的。当我数据设置的比较大时,在单个cpu时间片段内,for循环代码就执行不完,并且没有分配2个或2个以上的连续的cpu时间片段导致一个cpu时间片段没有执行完该线程,下一个线程开始执行了

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐