由ConcurrentLinkedQueue扯到线程安全 待收拾ITeye - 娱乐之横扫全球

由ConcurrentLinkedQueue扯到线程安全 待收拾ITeye

2019-01-13 13:48:35 | 作者: 觅波 | 标签: 安全,线程,操作 | 浏览: 2966

前几天项目总是报错,找了下原因。

ConcurrentLinkedQueue 自身是一个根据链接节点的无界线程安全行列,你自己调用就不必考虑线程安全了吗?

结论是:原子性操作当然是线程安全的,非原子性那就不安全了

原子性操作:

queue.add(obj);
 or
queue.poll();

非原子性操作(这儿涉及到两个操作,在大并发的时分,在两个办法之间,在中心这个时间,即当调用完了queue.isEmpty()的时分,或许有人操作了queue.poll(),在当你调用queue.poll()的时分,行列现已为空了,所以就出现异常了)

if(!queue.isEmpty()) {
 queue.poll();
}

应该为下面:

synchronized(queue) {
 if(!queue.isEmpty()) {
 queue.poll();
}

 

 参阅:http://stackoverflow.com/questions/435069/java-util-concurrentlinkedqueue/435941

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表娱乐之横扫全球立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章