永发信息网

C#代码--加载顺序问题

答案:2  悬赏:80  手机版
解决时间 2021-11-08 07:04
C#代码--加载顺序问题
最佳答案
add方法中,你是判断 key 不存在就添加, 你两个线程中提供的 key 不一样当然两个都会添加进去。
再说 lock方法里面少些一句,应该如下:
lock(obj)
{
en =list.xxxx;//就是把lock外面获取en的语句再重复执行一次
........if(en == null)............
}
全部回答
这样结果会不一样的。因为线程不受主线程的影响,什么时候执行到add这个过程都是不固定的,这就要看你电脑的执行速度了。
再说,class1是静态的。所以加了lock,lock并不是取先到先得的变量而后面的都抛弃,lock是将后面的数据暂时没有处理,先优先处理首先调用add这个过程的线程,其他线程暂停,而处理完毕才把停止的线程开启。追问

要么结果就是一个都加不进去

---------线程2开始实例化class1

---------请求正在处理中。。。

---------请求正在处理中。。。

追答我按照图片里的代码说:第一次锁定obj显示的是“加载second”也就是说t2(Thread)优先执行了。此时lock暂停除了t2的线程——t1,然后执行lock里的,执行完毕后(unlock),把停掉的t1(Thread)继续,也就又来到了lock,此时暂停了t2线程,输出了“加载first”。所以第二次是可以加进去的。你改成方法也是一样的,这跟有没有返回值没有关系的。lock是对于线程来说的。
第2中情况,也就是en!=null才出现的情况。追问Class1有静态无参构造函数,这时候就new Class2一下,除此之外应该没有第二次实例化Class2的吧?如果只实例化过一次Class2,那list也只实例化过一次,那就是说第一次lock锁定的时候会把值(first)加进去,等unlock后第二个进来(假设第二个值也是first),但那时候list已经有值了,所以会return掉;也就是说不管加了多少个线程都是一样的结果应该是这样吧
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
奔驰2017款 glc260豪华型 4matic 一年保险要
8分之89、9分之90、和11和10又8分之1比大小
1990年的歌曲
英语单词前面是“sh”开头的有哪些词?
魔瘦减肥咖啡多钱
为啥加拿大的存在感在国际上那么弱
淘宝商品标题用了only这个字母,现在被投诉知
《宿新市徐公店》中的“急走”是什么意思?
通过人力资源找到工作签和同是跟人力资源签,
我刚初中毕业想上三加二,怎么上
急求材料力学1和2第五版(孙训芳、方孝淑、关
盈江县旧城邮政所办公地址在什么地方,我要处
年检有效期满2017年12月31什么意思?
主板板型:micro atx板型外形尺寸:22.6×19.3c
饼子(曲奇)注册商标属于哪一类?
推荐资讯
一顿不吃辣椒就不行了,什身上缺人什么不
PICC古城第一营销部车驾管社会服务站办公地址
乙亥,己卯,戊午,戊午女 看一下
工作原因经常接触黑马王润滑油,会对身体不好
洛阳在温县的那个方位
求一款FC或FSC的游戏 每关可以救一个人质下一
吸入含有苯的气体会怎样?
成都市个人社保实缴490.2元,划入个人账户196.
老感觉喉咙有东西是怎么回事
四川江油要修4桥吗
农村宅基地继承后需要做户名变更吗?
我的世界怎么拼出字母W大写的
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?