一种多线程链表处理方法、装置及计算机可读存储介质制造方法及图纸

技术编号:22884117 阅读:39 留言:0更新日期:2019-12-21 07:21
本发明专利技术提供一种多线程链表处理方法、装置及计算机可读存储介质,方法包括:创建主线程和多个子线程,将链表载入主线程中,状态信息包括已处理标识和未处理标识;子线程启动后从链表中获取一个未处理标识的目标节点,对目标节点的数据进行数据处理,如果处理成功,则在链表中将其状态信息更新为已处理标识,并重新从链表中获取下一节点;主线程在经更新后的链表中对各个节点进行遍历,遍历过程中将状态信息为已处理标识的节点删除。采取主线程和多个子线程共同处理数据的方式,在链表的数据中加入节点的状态信息,多个子线程并行处理链表中节点的数据,无需考虑对其它子线程的影响,数据处理效率得到提升,链表也不容易受到破坏。

A multithreaded linked list processing method, device and computer readable storage medium

【技术实现步骤摘要】
一种多线程链表处理方法、装置及计算机可读存储介质
本专利技术主要涉及线程处理
,具体涉及一种多线程链表处理方法、装置及计算机可读存储介质。
技术介绍
目前行业中线程间的数据同步都是采用线程锁的方式,当某个线程需要操作链表时创建一个线程锁把链表锁住,待业务处理完毕后再把锁打开;在链表锁住期间其他链表将不能对链表进行操作,一直等待锁被打开才能进行业务处理;如果某个线程业务处理出现异常时经常出现被死锁的情况;程序运行时也有可能存在某个时间线程锁失效的情况,此时多个线程同时处理链表时,会出现链表迭代异常的情况。
技术实现思路
本专利技术所要解决的技术问题是针对现有技术的不足,提供一种多线程链表处理方法、装置及计算机可读存储介质。本专利技术解决上述技术问题的技术方案如下:一种多线程链表处理方法,包括如下步骤:创建主线程和多个子线程,并设置多个所述子线程的启动信息,所述启动信息包括各个所述子线程启动顺序;启动所述主线程,并根据所述启动信息对各个所述子线程进行启动,将链表载入所述主线程中,所述链表包括多个节点以及各个所述节点对应的状态信息和业务数据,所述状态信息包括已处理标识和未处理标识;所述子线程启动后从所述链表中获取一个状态信息为未处理标识的目标节点,对所述目标节点的业务数据进行数据处理,如果处理成功,则在所述链表中将其状态信息更新为已处理标识,并重新从所述链表中获取下一节点;所述主线程在经更新后的链表中对各个节点进行遍历,遍历过程中将状态信息为已处理标识的节点删除。本专利技术解决上述技术问题的另一技术方案如下:一种多线程链表处理装置,包括:线程创建模块,用于创建主线程和多个子线程,并设置多个所述子线程的启动信息,所述启动信息包括各个所述子线程启动顺序;启动模块,用于启动所述主线程,并根据所述启动信息对各个所述子线程进行启动,将链表载入所述主线程中,所述链表包括多个节点以及各个所述节点对应的状态信息和业务数据,所述状态信息包括已处理标识和未处理标识;所述子线程,用于启动后从所述链表中获取一个状态信息为未处理标识的目标节点,对所述目标节点的业务数据进行数据处理,如果处理成功,则在所述链表中将其状态信息更新为已处理标识,并重新从所述链表中获取下一节点;所述主线程,用于在经更新后的链表中对各个节点进行遍历,遍历过程中将状态信息为已处理标识的节点删除。本专利技术解决上述技术问题的另一技术方案如下:一种多线程链表处理装置,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,当所述处理器执行所述计算机程序时,实现如上所述的多线程链表处理方法。本专利技术解决上述技术问题的另一技术方案如下:一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,当所述计算机程序被处理器执行时,实现如上所述的多线程链表处理方法。本专利技术的有益效果是:采取主线程和多个子线程共同处理数据的方式,在链表的数据中加入节点的状态信息,即标志位,多个子线程并行处理链表中节点的数据,将对链表的操作放在主线程里,这样在多个线程处理数据时,无需考虑对其它子线程的影响,数据处理效率得到提升,链表也不容易受到破坏和异常。附图说明图1为本专利技术一实施例提供的多线程链表处理方法的流程示意图;图2为本专利技术一实施例提供的主线程及子线程的流程示意图;图3为本专利技术一实施例提供的多线程链表处理装置的模块框图。具体实施方式以下结合附图对本专利技术的原理和特征进行描述,所举实例只用于解释本专利技术,并非用于限定本专利技术的范围。图1为本专利技术一实施例提供的多线程链表处理方法的流程示意图。如图1所示,一种多线程链表处理方法,包括如下步骤:创建主线程和多个子线程,并设置多个所述子线程的启动信息,所述启动信息包括各个所述子线程启动顺序;启动所述主线程,并根据所述启动信息对各个所述子线程进行启动,将链表载入所述主线程中,所述链表包括多个节点以及各个所述节点对应的状态信息和业务数据,所述状态信息包括已处理标识和未处理标识;所述子线程启动后从所述链表中获取一个状态信息为未处理标识的目标节点,对所述目标节点的业务数据进行数据处理,如果处理成功,则在所述链表中将其状态信息更新为已处理标识,并重新从所述链表中获取下一节点;所述主线程在经更新后的链表中对各个节点进行遍历,遍历过程中将状态信息为已处理标识的节点删除。其中,已处理标识和未处理标识可用1和0来表示。应理解地,启动信息为对各个子线程启动次序的设置信息。例如,子线程1第一启动,子线程N最后启动。也可以根据时间间隔进行启动,例如,各个子线程相隔10分钟依次启动。上述实施例中,采取主线程和多个子线程共同处理数据的方式,在链表的数据中加入节点的状态信息,即标志位,多个子线程并行处理链表中节点的数据,将对链表的操作放在主线程里,这样在多个线程处理数据时,无需考虑对其它子线程的影响,数据处理效率得到提升,链表也不容易受到破坏和异常。可选地,作为本专利技术的一个实施例,还包括如下步骤:当所述主线程对所述链表遍历完成时,在缓存中检测是否存在用户端发送的新业务数据,如果存在,则对所述新业务数据进行数据处理,如果所述新业务数据处理成功,则在所述链表的末尾插入新节点,将处理成功后的新业务数据放置在插入的新节点中,并将所述新节点的状态信息设置为未处理标识,等待所述子线程进行二次数据处理。上述实施例中,对于中途加入的业务数据,放置在缓存中,待主线程对链表处理完成后,再处理缓存中的业务数据,并且将处理成功的业务数据放置在插入的新节点中,新节点设置在链表的末尾,不会影响链表迭代。新加入的业务数据都由主线程来进行一次处理,由其他子线程来对该业务数据进行二次处理,不会影响其他子线程处理,数据处理效率高。可选地,作为本专利技术的一个实施例,还包括步骤:所述主线程如果对所述新业务数据处理失败,则将所述新业务数据放置在所述缓存中,当所述主线程下一次对链表遍历完成时,从所述缓存中读取处理失败的新业务数据再次进行数据处理。应理解地,主线程对链表中所有节点遍历完成即为一个周期,当遍历周期完成时,则处理缓存中的业务数据,如果处理不成功,则进入下一个周期,下一个周期对所有节点遍历完成后,再次处理缓存中的业务数据。上述实施例中,新业务数据的加入不会影响对原有数据的处理。可选地,作为本专利技术的一个实施例,所述状态信息还包括处理中标识,还包括步骤:当所述子线程对所述目标节点进行数据处理时,将所述目标节点的状态信息更新为处理中标识;当所述子线程处理所述目标节点失败时,将所述目标节点的状态信息由处理中标识更新为未处理标识,以便再次对所述目标节点进行数据处理。上述实施例中,当某个子线程正在处理某个节点时,则标记为“处理中标识”,其他的子线程对“处理中标识”的节点不处理。能够防止重复对同一个节点处理。图2为本专利技术一实施本文档来自技高网...

【技术保护点】
1.一种多线程链表处理方法,其特征在于,包括如下步骤:/n创建主线程和多个子线程,并设置多个所述子线程的启动信息,所述启动信息包括各个所述子线程启动顺序;/n启动所述主线程,并根据所述启动信息对各个所述子线程进行启动,将链表载入所述主线程中,所述链表包括多个节点以及各个所述节点对应的状态信息和业务数据,所述状态信息包括已处理标识和未处理标识;/n所述子线程启动后从所述链表中获取一个状态信息为未处理标识的目标节点,对所述目标节点的业务数据进行数据处理,如果处理成功,则在所述链表中将其状态信息更新为已处理标识,并重新从所述链表中获取下一节点;/n所述主线程在经更新后的链表中对各个节点进行遍历,遍历过程中将状态信息为已处理标识的节点删除。/n

【技术特征摘要】
1.一种多线程链表处理方法,其特征在于,包括如下步骤:
创建主线程和多个子线程,并设置多个所述子线程的启动信息,所述启动信息包括各个所述子线程启动顺序;
启动所述主线程,并根据所述启动信息对各个所述子线程进行启动,将链表载入所述主线程中,所述链表包括多个节点以及各个所述节点对应的状态信息和业务数据,所述状态信息包括已处理标识和未处理标识;
所述子线程启动后从所述链表中获取一个状态信息为未处理标识的目标节点,对所述目标节点的业务数据进行数据处理,如果处理成功,则在所述链表中将其状态信息更新为已处理标识,并重新从所述链表中获取下一节点;
所述主线程在经更新后的链表中对各个节点进行遍历,遍历过程中将状态信息为已处理标识的节点删除。


2.根据权利要求1所述的多线程链表处理方法,其特征在于,还包括如下步骤:
当所述主线程对所述链表遍历完成时,在缓存中检测是否存在用户端发送的新业务数据,如果存在,则对所述新业务数据进行数据处理,如果所述新业务数据处理成功,则在所述链表的末尾插入新节点,将处理成功后的新业务数据放置在插入的新节点中,并将所述新节点的状态信息设置为未处理标识,等待所述子线程进行二次数据处理。


3.根据权利要求2所述的多线程链表处理方法,其特征在于,还包括如下步骤:
所述主线程如果对所述新业务数据处理失败,则将所述新业务数据放置在所述缓存中,当所述主线程下一次对链表遍历完成时,从所述缓存中读取处理失败的新业务数据再次进行数据处理。


4.根据权利要求1所述的多线程链表处理方法,其特征在于,所述状态信息还包括处理中标识,还包括如下步骤:
当所述子线程对所述目标节点进行数据处理时,将所述目标节点的状态信息更新为处理中标识;
当所述子线程处理所述目标节点失败时,将所述目标节点的状态信息由处理中标识更新为未处理标识,以便再次对所述目标节点进行数据处理。


5.一种多线程链表处理装置,其特征在于,包括:
线程创建模块,用于创建主线程和多个子线程,并设置多个所述子线程的启动信息,所述启动信息包括各个所述子线程启动顺序;
...

【专利技术属性】
技术研发人员:汤红燕王峰方皓莫易孙畅唐毅龙陈丽洁
申请(专利权)人:桂林长海发展有限责任公司
类型:发明
国别省市:广西;45

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1