从链表中删除节点的线程安全方法。
public void delete(String x, LinkedList<String> list)
{
String lock = "false";
for (int i = 0; i < list.size(); i++) {
synchronized (lock) {
if (list.get(i).equals(x)) {
lock = "true";
list.remove(i);
}
lock = "false";
}
}
}
非常感谢!
编辑:上述方法是线程安全的,但其性能需要提高。这是一个面试问题。
最佳答案
同步方法本地的对象并没有真正做任何有用的事情。此外,覆盖对同步块(synchronized block)内锁定的对象的引用在目的上是令人困惑的。关于该代码用途的一些解释可能会帮助我们帮助您改进它:)
实际问题。
get(i)
和remove(i)
都要求您将列表迭代到位置 i。如果您使用列表的实际迭代器和迭代器的删除方法,则只需迭代整个列表一次。
关于java - 如何提高以下java方法从链表中删除元素的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10488272/