为什么需要使用多线程:
在单线程程序中,程序在完成当前指令前就不能做一件事。
举个例子:小王是个单线程的人,有一天,他在接水喝,但是水龙头不出水,小王就只能一直等,等到水杯装满为止才会去做下一件事,比如给自来水公司打电话投诉。
而小李是个多线程的人,他也要接水喝,但是水龙头也一样不出水,于是小李发现这件事花的时间太长了,就去做另一件事,比如写CSDN博客,一边等水龙头出水。
从上面的例子可以看得出,多线程比起单线程可以做更多的事情,譬如同时处理多个任务(如果有多个逻辑处理器的话)。就算只有一个逻辑处理器,也可以更好地安排事情的顺序,同步执行不同的任务,防止被一个任务卡死。
可是,代价是什么:
多个任务间为了沟通,就必须要对在同一个内存空间中的数据进行交流,这就导致难免出现偏差。
举个例子:有A,B,C三个人,和一本公用笔记本,每个人手里也都有一本写着数字的小本子,他们要做的事情,就是共同计算出三个人手里的本子上的数字的总和,然后把新的数字贴在公用笔记本上。于是,A看了眼自己的笔记本,是3,再看了下公用笔记本,是0,就写了个3贴在了公用笔记本上。但是就在A写字的时候,B也看了眼公用笔记本,这时候还是0,而他自己的笔记本上写的是2,但是B的动作没有A快,就在A贴完3后把2给贴在了公用笔记本上,这时候明明正确的计算结果是5,笔记本上却只会记录一个2。
为了解决譬如上面的这个笔记本问题,我