一、加入线程同步的原因
由于同一进程中的所有线程都是共享数据的,如果对线程中共享数据的并发访问不加以限制,结果将不可预期,在严重的情况下,还会产生死锁
在一个进程内的所有线程共享全局变量,能够在不使用其他方式的前提下完成多线程之间的数据共享(这点要比多进程要好)
缺点就是,线程是对全局变量随意遂改可能造成多线程之间对全局变量的混乱(即线程非安全)
二、解决数据混乱的方法
为了让线程是安全的,解决方法:
1、为了解决这个问题,需要允许线程独占地访问共享数据,这就是线程同步。
2、让每个线程拥有一个独立的私有变量
三、数据混乱示意图
四、代码实现数据混乱问题
执行结果为:数据混乱
但是当我把累加次数设置小,就不会出现数据混乱问题
数据混乱的原因:
cpu分成多个时间片段,启动10线程,分配10个cpu时间片段,当我累加数字设置比较小的时候,在单个cpu时间片段内,for循环代码就执行完,就不会产生数据混乱的。当我数据设置的比较大时,在单个cpu时间片段内,for循环代码就执行不完,并且没有分配2个或2个以上的连续的cpu时间片段,导致一个cpu时间片段没有执行完该线程,下一个线程开始执行了