gpt4 book ai didi

Java对象实现Runnable,如何从集合中移除对象

转载 作者:行者123 更新时间:2023-11-29 08:19:04 25 4
gpt4 key购买 nike

我有一个实现 Runnable 的 java 对象。这是代码。

public class Obj implements Runnable {

boolean shouldRun;

private int stuff

public Obj() {
this.setshouldRun(true);
stuff = 0;
}

public synchronized void setshouldRun(boolean shouldRun) {
this.shouldRun = shouldRun;
}

public synchronized boolean getshouldRun() {
return this.shouldRun;
}

@Override
public void run() {
while (shouldRun) {
//do stuff
}
}

}

下面是我如何使用 Obj。

Obj o = new Obj();
//q is a collection of Obj
q.add(o);
new Thread(o).start();

当我想删除 o 时,我可以安全地这样做吗:

o.setshouldRun(false); //thread will finish
q.remove(o);

最佳答案

您需要同步对 shouldRun 的所有访问,而不仅仅是写访问。您可以通过添加一个同步的 getter isShouldRun 而不是直接在此行访问 shouldRun 来做到这一点:

while (isShouldRun())

或者你可以让 shouldRun volatile .

如果不这样做,可能会导致一个线程对 shouldRun 值的更改不会在另一个线程中被注意到。

关于Java对象实现Runnable,如何从集合中移除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1786939/

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