java 板


LINE

※ 引述《jehovah (Lucius)》之铭言: : 大家好, 小弟对multi thread还不熟悉, 想请教一个问题 : 目前我有A, B两条thread, 以及一个公用的arraylist : A thread会做以下的工作: : arraylist.remove(old_index); : ...一些运算 : arraylist.add(new_index, obj); : B thread则会对arraylist作get : 因此A在作add前, B有机会IndexOutOfBounds : 我查了synchronized修饰字, : 将A的工作用synchronized包起来, 可是没有帮助 : synchronized(arraylist){ : ... : } : 我是希望锁住arraylist这个物件, 而不是操作这物件的Method : 请问一般来说, 这种状况如何处理较恰当? : 可否给我点建议, 或是该往哪个方向去查..谢谢:) ReentrantLock arrLock = new ReentrantLock(); ArrayList<Object> arrList = new ArrayList(); public Object arrGet(int i) { arrLock.lock(); try { return arrList.get(i); } finally { arrLock.unlock(); } } public void arrSet(Object obj) { arrLock.lock(); try { arrList.add(obj); } finally { arrLock.unlock(); } } 关键字:Lock 这是比synchronized麻烦,但比synchronized的弹性更大的东西 例如: if (arrLock.trylock())try { //TODO 成功锁定物件後要做的事 } finally { arrLock.unlock(); } else { //TODO 万一物件被别条执行绪锁定时要做的事 } Thinking in JAVA有比较详细的说明 另外,这个东西使用上有个要注意的地方 根据自己使用上的经验 如果在try中喷出错误的话,仍然跑finally中的程式码去解锁 但如果执行绪在中途被砍掉的话,有可能就一直锁在那边 所以请不要在执行绪还在try区块当中时,去砍执行绪 (那时候把lock设成static,又遇到程式出错误,去用android的工具中断掉程式 再次执行程式就发现lock还被锁着) 可能有防止的办法吧.... 但因为我没砍执行绪的需求,就没深入研究 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 125.233.156.87
1F:→ LaPass:补一下 java.util.concurrent 底下有许多执行绪安全的容器 10/05 00:29
2F:推 jehovah:谢谢..这个东西好酷 10/05 00:32
3F:→ LaPass:可用,你可以去翻看看有没有适合的可用 10/05 00:33
4F:推 tomap41017:推concurrent,不需要自己写 10/06 01:20
5F:推 jehovah:谢谢解答, 我用CopyOnWriteArrayList可以解掉问题:) 10/07 01:47
6F:→ jehovah:另外我有疑问vector可否代替CopyOnWriteArrayList?差异是? 10/07 01:50







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP