java布尔类型的调用_java-使用布尔值进行同步

以下代码在并发访问List时是否是线程安全的?

挥发物合格在这里增加任何价值吗?

class concurrentList{

private AtomicBoolean locked = new AtomicBoolean(true);

volatile List list=new LinkedList();

long start = System.currentTimeMillis();

long end = start + 60*100;

public void push(int e){

while(!locked.get());

list.add(e);

while(!locked.compareAndSet(true,false));

}

public int pop(){

int elem;

while(locked.get());

elem=(Integer)list.remove(0);

while(!locked.compareAndSet(false,true));

return elem;

}

....

}

解决方法:

不,它不是线程安全的.调用push()的两个线程可以完美地将lock读取为true,然后同时将其添加到链接列表中.由于LinkedList不是线程安全的,因此您的代码也不是线程安全的.

要锁定,请使用锁,而不是AtomicBoolean.

标签:concurrency,java-util-concurrent,java

来源: https://codeday.me/bug/20191111/2018928.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值