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.Buffer
class没有参数化,也没有提供 get
和 put
方法。 java.nio.Buffer
的子 class 确实有 get
和 put
方法,但它们与每个都不相关其他在类型级别。)
我遇到了一个练习,但我不是 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.Buffer
class没有参数化,也没有提供 get
和 put
方法。 java.nio.Buffer
的子 class 确实有 get
和 put
方法,但它们与每个都不相关其他在类型级别。)