gpt4 book ai didi

Java 线程安全 : enum and static methods

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:38:06 25 4
gpt4 key购买 nike

我认为 sortList 方法(参见下面的伪代码)是线程安全的吗?

我的理解是"is",因为这里没有任何变量,但我必须确定。伪代码:

//This method should be thread-safe
public static void sortList (List<MyObject> list, SortType sortType) {
Collections.sort(list, sortType.getComparator());
}

//Defines type of sorting
public static enum SortType {
BY_FIELD_1 (new ComparatorByField1()),
BY_FIELD_2 (new ComparatorByField2()),
...
BY_FIELD_N (new ComparatorByFieldN());

private comparator;
private SortType (Comparator comparator) {
this.comparator = comparator;
}

public getComparator () {
return comparator;
}

//Method getFieldX in pseudo-code bellow returns a number
private static class ComparatorByField1 implements Comparator<MyObject> {
public int compare (MyObject o1, MyObject o2) {
return (int) (o1.getField1() - o2.getField1());
}
}
...

private static class ComparatorByFieldN implements Comparator<MyObject> {
public int compare (MyObject o1, MyObject o2) {
return (int) (o1.getFieldN() - o2.getFieldN();
}
}
...
}

最佳答案

只有当您有 2 个或更多线程“同时”访问相同数据时,您才会遇到线程安全问题。

您的方法操纵它们的参数。这意味着无论调用这些方法的频率或有多少线程,您都不应该遇到问题。

当然,除非您在相同 对象上调用这些方法。

因此,到目前为止我们看到的是线程安全的。

但是如果你的真实代码会做类似的事情

List<YourObject> someObjects = ...
sortList(someObjects);
sortList(someObjects);

(基本上对同一个数组进行两次排序,可能同时进行)......这不是一个好主意。

关于Java 线程安全 : enum and static methods,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38168843/

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