您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
多线程是什么意思-易语言多线程是什么意思
线程,多线程,变量多线程是什么意思-易语言多线程是什么意思
发布时间:2016-12-08加入收藏来源:互联网点击:
很多朋友想了解关于多线程是什么意思的一些资料信息,下面是小编整理的与多线程是什么意思相关的内容分享给大家,一起来看看吧。
多线程今天主要想讲的是线程安全问题,为什么多线程情况下会出现线程不安全问题?
什么是多线程?可以简单的理解为:即就是一个程序中有多个线程在同时执行。举例:我们使用QQ音乐同时下载多首音乐时,QQ音乐程序会创建多个线程来下载音乐。
并行我们先说下串行。关于串行这个很好理解。假设在单线程情况下,我们使用QQ音乐来串行的下载5首音乐的话,那下载顺序和进度就是A下载完成了然后下载B,顺序就是A-B-C-D-E。
那么我们来谈下并行,在多条线程的情况下,QQ音乐程序是怎么完成音乐的下载了?多线程情况下,程序会并发的来执行线程里的下载音乐的任务,从而会无序的完成5首音乐的下载。而不是需要等待A下载完成才能下载B,而是几乎"同时"执行下载的。
关于线程安全在实际的开发过程中,其实我们写出的代码可能存在多线程安全问题。比如:2条线程同时来对数组进行删除操作,最后导致程序的crash。
【比如数组 nums = [1,2,3,4,5],线程A获取nums后线程B也获取nums,然后线程A执行remove(nums[4]),执行完成后nums=[1,2,3,4],然后这个时候B也执行执行remove(nums[4]),导致crash,因为数组越界】
举一个简单的例子来说明下多线程下存在的安全问题:
现在有一个Integer变量,有2个线程分别是线程A和线程B对其进行加1操作,如果不设置锁的话,会造成以下的问题
开始的时候,线程A读取integer变量为17,过了一会儿线程B也获取了integer变量,此时值也为17;然后线程A执行加1操作,此时integer值变为18;又过了一会儿,线程B执行加1操作,integer的值还是18,因为线程B在第一步获取的变量值为17;线程A和线程B将加1后的值18进行写入;最后,我们发现写入的值18和预期的值19不符,所以结果错误。那如何保证线程安全了?解决方案:使用线程同步技术(同步,就是协同步调,按预定的先后次序进行)常见的线程同步技术是:加锁
如图所示:1.线程A在获取integer变量时,就lock加锁,这个时候其他的线程就不能获取integer变量了
2.线程A执行加1操作,然后写入完成后,unlock解锁,让别的线程可以访问integer变量线程B重复上述操作,从而保证了线程的安全。
总结这是一个非常简单的多线程模型,在实际的开发过程中,多线程的情况可能会复杂些。例如:多个线程对数组进行删除操作,如果不保证线程安全的话,最后可能会导致数组越界然后程序crash;
当然,多线程其实也不难,因为我们可以使用锁的机制来处理线程安全问题,那么你知道一共有多少种锁吗,为什么会出现不同种类的锁吗?
本文到此结束,希望对大家有所帮助呢。
上一篇:觊觎的读音-给予的读音
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |