代码出现dug,定义了一个类型a,有int,string,datetime。List<a> p=new list<a>();
p.add的条件是list里面没有a.string ,有则int加1。
if(p.contains(a))
p.add(a)
else
...
因为我使用的是多线程 list在满足条件下进行add,会在两分钟后被remove掉,所以 我使用了进程锁
刚开始是这样的
if(p.contains(a))
{ lock{
p.add(a);}
}
else
。。。
后来老是出现数据在某个时刻老是重复 而且没有规律可以寻找 在寻找了很久之后发现 重复数据是因为lock的时候没有把if判断的条件带上,两个线程带着同样的数据都过了if的判断条件就出现了上述的结果。
再来一个应用场景,给服务器发送并获得返回值,当出现服务器连接不上或着操作超时的时候要再对服务器进行访问,所以选择让线程休眠2s。
if(ex.contains("操作超时"))
{lock(...thread.sleep(2000);} 结果造成了服务器一秒访问几百条的数据。
总结: lock不能乱用,数据采集的用到多线程的,数据出现重复的 不妨往lock上面找错误