Java 线程安全问题
Posted
技术标签:
【中文标题】Java 线程安全问题【英文标题】:Java Thread safety questions 【发布时间】:2021-12-16 18:07:38 【问题描述】:我遇到了一个练习,但我不是知道如何实现它的 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.
我的问题是:如何处理上面我在 cmets 中指出我不知道该写什么的代码部分?
有什么想法吗?
【问题讨论】:
如果你有两个问题,你应该分开问。 @Makkador - 我会和你讨价还价。编辑您的问题以删除其中一个问题,然后我将尝试理解并回答另一个问题。否则,问题可能会被关闭......没有任何答案。 好小子... :-) 我回滚了编辑并进行了编辑,因此提出了第一个问题,因为您之前的编辑没有提出问题。 我已回滚您的回滚,因为它使我对修改后问题的回答变得毫无意义。马克 - 你应该知道得更好!有明确的问题提出。查看代码 cmets。唯一缺少的是问号。我会添加它们......如果它让你开心。 【参考方案1】:我假设您所指的“它”是s
参数。
您需要声明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
类没有参数化,也没有提供get
和put
方法。@的子类987654331@ 确实有 get
和 put
方法,但它们在类型级别上没有相互关联。)
【讨论】:
以上是关于Java 线程安全问题的主要内容,如果未能解决你的问题,请参考以下文章