Java 线程安全问题

Java Thread safety questions

我遇到了一个练习,但我不是 java 大师,不知道如何实现它。我的 objective 是实现一个通用接口,它有一个 getter 和 setter 方法。在它的构造函数中,我必须放置一个实现此通用接口的 s 对象。我们必须将此对象存储在我们的 class 中并使用此 class 的 getter 和 setter 来实现我们的 classes getters和 setters(代表团)。

public class Threads<T> implements Buffer<T>{
    Object s;
    public Threads(Object s) { // we know, that It implements our Buffer interface
        this.s=s;//i have no clue to what I should convert it.
    }
    
    synchronized public void put(T t) {
        //i don't know how to call s's put method
    }
    synchronized public T get() {
        //I don't know how to call s's get method.
        
    }
    
}

我的问题是:我如何处理上面代码中我在评论中指出我不知道该写什么的部分?

有什么想法吗?

我推测你指的“它”是s参数。

您需要声明 s 参数和类型为 Buffer<T>s 字段。像这样:

public class Threads<T> implements Buffer<T>{
    Buffer<T> s;

    public Threads(Buffer<T> s) { 
        this.s = s;
    }
    
    synchronized public void put(T t) {
        s.put(t);
    }

    synchronized public T get() {
        return s.get();
    }
}

至此,您已经为 Buffer<T> 实现了线程安全的包装器。但它仅对于使用包装器方法执行的操作是线程安全的。

(这个Buffer<T>class/接口肯定是你自己设计的,标准的java.nio.Bufferclass没有参数化,也没有提供 getput 方法。 java.nio.Buffer 的子 class 确实有 getput 方法,但它们与每个都不相关其他在类型级别。)