gpt4 book ai didi

java - 是下面的静态实用方法 Threadsafe

转载 作者:行者123 更新时间:2023-11-29 09:48:52 30 4
gpt4 key购买 nike

我正在编写一个静态实用程序方法。我知道方法 isEmpty() 、 isNew() 是线程安全的。在 getTotal(...) 方法中,我使用 StringBuilder 作为与 String 和 int.StringBuilder 可变的参数。 getTotal() 是线程安全的。如果是,请解释为什么即使 StringBuilder 是可变的。 但是我不确定 getCharge() 是否是线程安全的,因为它调用了方法 getTotal()。有人可以告诉它是否是线程安全的

public class NewStringUtils {

public static boolean isEmpty(String s){
return (s == null || s.trim().length()==0);
}

public static boolean isNew(String code){
return( "1009".equals(code) || "1008".equals(code) );
}
//StringBuilder is mutable -- is the below method threadsafe
public static int getTotal(StringBuilder sb,String oldCode ,int a, int b){
//Is it Threadsafe or not .If so just bcz every thread invoking this method will have its own copy and other threads can't see its value ??
int k =0;
if("1011".equals(oldCode) && "1021".equals(sb.toString()) {
k = a+b;
}
return k;
}
// is the below method threadsafe
public static int getCharge(String code,String oldCode,int charge1,int charge2){
int total =0;
StringBuilder sb = new StringBuilder("1021");
if(!NewStringUtils.isEmpty(code)){

if(NewStringUtils.isNew(code)){
//here invoking a static method which has StringBuilder(Mutable) as a parameter
total = NewStringUtils.getTotal(sb,oldCode,charge1,charge2);
}
}

return total;
}
}

最佳答案

是的。您没有使用任何非方法作用域的字段/变量,并且方法的所有参数都是不可变的,因此它是线程安全的。

在不使用任何非方法范围变量的方法中,唯一的线程安全风险是参数是否可变,因此可能会被另一个线程修改。由于基元和 String 是不可变的,所以你很好。

编辑:发表评论:

How about this: if a method (static or otherwise) uses only method-scoped variables, has only immutable parameters and only invokes other thread-safe methods then it must be thread-safe

关于java - 是下面的静态实用方法 Threadsafe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15687216/

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