Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使类级DTO(实例变量)成为线程安全的java_Java_Multithreading_Thread Safety - Fatal编程技术网

使类级DTO(实例变量)成为线程安全的java

使类级DTO(实例变量)成为线程安全的java,java,multithreading,thread-safety,Java,Multithreading,Thread Safety,我有班级级别的DTO。我必须保证它的线程安全。 我之所以要这样做,是因为当多个请求同时到达多个线程时,数据正在跨线程交换。 我知道类级变量不是线程安全的。但是有没有办法使它线程安全呢。 我不想使用同步,因为它的性能会受到影响,无法在负载平衡中工作。你知道如何做到这一点吗 感谢您的帮助:) 提前谢谢 代码: 。 此DTO被发送到下一层 }通过将所有类成员声明为final,使DTO不可变,并提供一个构造函数在创建DTO时设置它们(类成员) 这样做可以确保所有值只读/设置一次。此外,您还可以删除(或不

我有班级级别的DTO。我必须保证它的线程安全。 我之所以要这样做,是因为当多个请求同时到达多个线程时,数据正在跨线程交换。 我知道类级变量不是线程安全的。但是有没有办法使它线程安全呢。 我不想使用同步,因为它的性能会受到影响,无法在负载平衡中工作。你知道如何做到这一点吗

感谢您的帮助:)

提前谢谢

代码:

。 此DTO被发送到下一层
}

通过将所有类成员声明为
final
,使DTO不可变,并提供一个构造函数在创建DTO时设置它们(类成员)

这样做可以确保所有值只读/设置一次。此外,您还可以删除(或不生成/提供)任何setter。例如:

public final class DataDTO {
  private final String data;
  private final String description;

  public DataDTO(String data, String description) {
    this.data = data;
    this.description = description;
  }

  public String getData() { return data; }

  public String getDescription() { return description; }
}

注意:如果需要从该类扩展,请删除
final

它是实例变量,而不是类。请阅读此内容。它的实例变量(包装类)
public final class DataDTO {
  private final String data;
  private final String description;

  public DataDTO(String data, String description) {
    this.data = data;
    this.description = description;
  }

  public String getData() { return data; }

  public String getDescription() { return description; }
}