首页 > 解决方案 > Java 线程安全问题

问题描述

我遇到了一个练习,我不是知道如何实现它的 Java 大师。我的目标是实现一个具有 getter 和 setter 方法的通用接口。在它的构造函数中,我必须放置一个实现这个通用接口的 s 对象。我们必须将这个对象存储在我们的类中,并使用这个类的 getter 和 setter 来实现我们的类 getter 和 setter(delegation)。

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.
        
    }
    
}

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

有任何想法吗?

标签: javamultithreadingsynchronizationthread-safety

解决方案


我认为您所指的“它”是s参数。

您需要使用 type 声明s参数和s字段Buffer<T>。像这样的东西:

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>类/接口一定是你自己设计的。标准java.nio.Buffer类没有参数化,也没有提供getandput方法。子类java.nio.Buffer确实有getandput方法,但是在type上没有关联等级。)


推荐阅读