Java 更改另一个类中的变量

Java 更改另一个类中的变量,java,multithreading,Java,Multithreading,如果我有一个主类primary,因为它有大部分正在运行的代码、run方法等,而一个线程在另一个类中运行,那么线程能否更改驻留在主类中的[public static]布尔值,并且主类会相应地作出反应 请说明我是否不清楚 您可以从线程分配给其他类的静态公共成员。但是,考虑并发访问。因此,您需要使用Java关键字synchronized来保护对该成员的访问 最好的方法是: private static String thing = "dskfjksf"; public static void set

如果我有一个主类primary,因为它有大部分正在运行的代码、run方法等,而一个线程在另一个类中运行,那么线程能否更改驻留在主类中的[public static]布尔值,并且主类会相应地作出反应


请说明我是否不清楚

您可以从线程分配给其他类的静态公共成员。但是,考虑并发访问。因此,您需要使用Java关键字synchronized来保护对该成员的访问

最好的方法是:

private static String thing = "dskfjksf";

public static void setThing(String newValue) {
    synchronized(thing) {
        thing = newValue;
    }
}

该线程可能有权访问该变量,因此是的,它可以由该线程更改。但只有在显式重新分配变量的情况下,类才能对任何事情做出反应。只有线程才能使事情发生。类只是描述特定类型对象的方法和其他信息的集合,可能还包括一些静态字段。注意:每个程序至少有一个线程。即使它不创建任何新线程,也总是有主线程,而不仅仅是静态成员。根据定义,所有线程都在相同的地址空间中运行。每个线程都可能访问JVM中的任何对象。它所需要的只是一个引用…@jameslarge我并没有说只有静态成员可以访问,但问题是关于一个公共静态成员:线程是否可以改变一个[public static]booleanTrue。我只是想,有人会看到你能做X,并且认为这意味着你只能做X。