gpt4 book ai didi

Java/安卓 : LinkedList race condition

转载 作者:行者123 更新时间:2023-11-29 03:41:09 27 4
gpt4 key购买 nike

我在 android 应用程序中使用 LinkedList,我遇到了竞争条件。 1 个线程将数据添加到 LinkedList,而另一个线程在检索到数据时删除它们。我遇到了我新添加的对象从未被处理的情况。

我在 Google 上搜索了 Java 同步对象,但要么我想得太简单了,要么我遗漏了什么。根据我的阅读,“对象同步”是两者中较难的一个,所以我想知道是否只用 sychronized(object) { }; 封装一段代码就足够了吗?

所以,我有:

public void function addMove(Object move) {
synchronized(list) {
list.add(move);
};
};

public void function second() {
synchronized(list) {
// iterate through the list
list.clear;
};
};

这真的是我所需要的吗?

最佳答案

- 在您的情况下,如果您的列表与对象正确耦合,并且除了这种唯一方法之外没有其他方法可以访问它,那么我认为就足够了。

- 此外,还可以使用以下方法:

public class Test{

private LinkedList<Object> list = new LinkedList<Object>();

public void function addMove(Object move) {
synchronized(this) {
list.add(move);
}
}

public void function second() {
synchronized(this) {
list.clear;
}
}


}

///////////////////////////////编辑部分//////////////////////

- 同步是为了保护数据的关键状态应用方法原子语句访问其数据要保护的字段

- 每个对象都有一个且只有一个锁,由线程获取以访问可以访问其实例变量同步方法原子语句

- 同样,每个类都有一个且只有一个锁,线程需要获取这个锁才能访问synchronized 方法原子语句 可以访问其静态变量

- 现在,当 thread 获得对象锁的访问权限后,它就可以访问其同步方法或原子语句,并且 if那时另一个线程试图访问同一个对象锁,然后那个线程被拒绝访问并且它移动到阻塞状态

关于Java/安卓 : LinkedList race condition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13111533/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com