多线程太可怕了

本文讲述了在项目中遇到一个多线程导致的bug,涉及代码由知名外包公司EPAM systems编写。问题在于多线程间的交互,当maintenance project尝试停止incremental project并触发retry机制时,由于状态更新的时机不当,导致retry失效。在连续测试环境中,这个问题频繁出现。尽管代码本身没有问题,但这种罕见情况未被考虑到,现正寻求解决方案。
摘要由CSDN通过智能技术生成
 

今天发现了一个多线程引起的bug。然后进一步体会到,这东西太容易出问题了!

首先要说明的是,出问题的代码可不是一般人写的,是由一个叫EPAM systems的世界知名外包公司的人写的。

这些java程序员个个经验丰富,心高气傲。貌似base在乌克兰,工资比起我们这些中国民工可要高不少的。

然而事实证明,写多线程代码,再牛的人,心思稍微不缜密就会出错。


简单介绍一下代码内容:

1,工程是由多个project组成,会被定时运行。每个project都有记录自己状态的一个公共对象。

2, 其中一个incremental project一旦调用就不会停止。每天早上凌晨有一个maintenance project会被运行做些archive,housekeeping等工作。

这两个project互斥。因此,maintenance project启动时,会先将incremental project停止。maintenance project运行完毕后,会再次启动incremental project。

3,incremental project 有失败的风险,因此有retry的功能。失败后会尝试5次,如果全部失败,则整个程序会停下来。但是一般5次之内可以成功。

4,incremental project与其他project不是互斥的。即同时可以有多个project同时运行。因此,每个project都在自己的线程中运行。


现象:

CI最近一直失败。查看log后发现retry的功能似乎失效了。incremental一次失败后程序就停止了。

一直忙今天终于有点时间查查怎么回事儿了&#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值