小编Ali*_*zan的帖子

Java - 有一种线程安全的方法来分配没有锁的新对象吗?

好的,所以我意识到所有线程共享堆,其中包含为java程序分配的所有对象.这意味着如果多个线程尝试分配新对象,那么它们可能会互相混乱并导致分段错误.在阅读了一些其他线程之后,我仍然不明白是否有一种无锁,安全的方法来构造一个线程内的对象.我正在尝试在java中为学校项目实现一个无锁的hashmap,并且需要弄清楚构造函数调用我是否是线程安全的.如果没有,是否有某种解决方法或内存管理技术可以用来使事情有效?

这是我的内部课程的样子

public class dataNode<T> extends node<T>{
    int hash;
    T data;

    public dataNode(int _hash, T _value){
        this.isArrayNode = false;
        this.hash = _hash;
        this.data = _value;
    }


}
Run Code Online (Sandbox Code Playgroud)

而我的无锁hashmap的另一个类内部:

import java.util.concurrent.atomic.*;
public class arrayNode<T> extends node<T>{

    //this is an array where elements consist of datanodes and arraynodes
    AtomicStampedReference<node<T>> [] array;

    public arrayNode(int size){
        this.isArrayNode = true;
        array = new AtomicStampedReference[size];
        for (int i = 0; i < size; i++){
            array[i] = new AtomicStampedReference<node<T>>(null, concurMap.UNINITIALIZED);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

java heap multithreading memory-management

3
推荐指数
1
解决办法
597
查看次数

使 lombok 构建器实现 2 个具有公共字段的类的接口

假设我有一个接口和两个类,如下所示:

public interface FinancialTransactionBuilder {
    FinancialTransactionBuilder cost(int cost);
    FinancialTransactionBuilder dateOfPurchase(Date date);
    FinancialTransactionBuilder customer(Customer customer);
}
Run Code Online (Sandbox Code Playgroud)
@Builder 
public class ProductPurchaseInstance{
    int cost;
    Date dateOfPurchase;
    Customer customer;
    String productSerialNumber;
}
Run Code Online (Sandbox Code Playgroud)
@Builder 
public class ServicePurchaseInstance {
    int cost;
    Date dateOfPurchase;
    Customer customer;
    Service serviceSold;
}
Run Code Online (Sandbox Code Playgroud)

因此,这些类有 3 个公共字段costdateOfPurchase、 和customer,并且接口是这两个类的构建者都可以实现的。

有没有办法让我在 lombok@Builder@SuperBuilder注释中指定构建器正在实现某些接口方法?

在有人问“你为什么要这样做?”之前,这是因为我正在使用两个非常相似的模型的代码库,并且将数据附加到这两个类的构建器的逻辑是非常复杂的重复代码。到目前为止,我写出了所有样板构建器代码,以便创建一个使用该接口附加数据的单一方法。但我想使用注释,以便在数据模型发生变化时不必更新样板。

或者...我是否只需要创建一个具有公共字段并使用@SuperBuilder注释的抽象父类?

java lombok intellij-lombok-plugin

1
推荐指数
1
解决办法
3196
查看次数