Java 是来自静态方法线程保存的静态方法调用
当我在静态java方法中使用静态属性时,这个方法不再是线程保存 在静态java方法中使用静态方法怎么样?这会打乱我的价值观吗 这里有一些例子: 我想这根本不是线程保存:Java 是来自静态方法线程保存的静态方法调用,java,thread-safety,Java,Thread Safety,当我在静态java方法中使用静态属性时,这个方法不再是线程保存 在静态java方法中使用静态方法怎么样?这会打乱我的价值观吗 这里有一些例子: 我想这根本不是线程保存: public static String staticText; public static Integer staticNumber; public static String doA(String input1, Integer input2){ staticText = input1; staticNu
public static String staticText;
public static Integer staticNumber;
public static String doA(String input1, Integer input2){
staticText = input1;
staticNumber = input2;
return staticText + staticNumber;
}
这将是线程保存:
public static String doB(String input1, Integer input2){
return input1 + input2;
}
现在我的问题是,这个方法是什么:
public static String doC(String input1, Integer input2){
return doB(input1, input2);
}
方法文档仍然是线程保存吗?我只是想确保对doB inside doC的方法调用不会阻止线程安全。
静态
和线程安全没有任何关系。一个定义字段是与类作为一个整体(static
)还是与实例(而不是static
)相关。另一个涉及线程并发和/或序列化
如果您从另一个静态方法调用的静态方法执行了一些由多个线程同时执行可能会有问题的操作,则需要以通常的方式(使用
java.util.concurrent
的各种功能进行同步等)来处理这些操作。该方法是静态的
,并且它是从另一个静态的
方法调用的,这一事实与它毫无关系。静态的
和线程安全性之间没有任何关系。一个定义字段是与类作为一个整体(static
)还是与实例(而不是static
)相关。另一个涉及线程并发和/或序列化
如果您从另一个静态方法调用的静态方法执行了一些由多个线程同时执行可能会有问题的操作,则需要以通常的方式(使用
java.util.concurrent
的各种功能进行同步等)来处理这些操作。该方法是静态的
,并且它是从另一个静态的
方法调用的,这一事实与此完全无关。我认为一些一般的经验法则将帮助您:
只要只使用局部变量,所有方法(静态或非静态)都将是线程安全的,因为每次调用都会重新实例化局部变量,因此不能在线程之间进行干扰
如果您创建一个类的新实例作为局部变量,那么访问该实例的实例字段也将是线程安全的
如果您写入一个静态字段,那么这不是线程安全的,因为静态字段可以从同一个类加载器中的任何位置访问(通常意味着在运行的JVM中的任何位置)。写入静态字段将使另一个线程可能同时写入该字段,这可能会导致奇怪的效果
你真的应该试着理解你问题中的术语是什么意思。你现在的提问方式表明你没有掌握这些概念。你可以在网上找到很多关于这方面的信息,例如: