我有一个负责与数据库交互的Java类,以及几个同时访问它的对象。
因此,我必须确保在每个时间点,最多只执行一个与数据库相关的操作。
我打算在实现以下接口的类中实现这些操作:
public interface IPersistenceAction<T> {
T run(final IPersistenceState aPersistenceState);
}
IPersistenceState
包含对java.sql.Connection
和java.sql.Statement
:
public interface IPersistenceState {
void setStatement(final Statement aStatement);
Statement getStatement();
void setConnection(final Connection aConnection);
Connection getConnection();
}
实现IPersistence
接口的类应该
请注意,每个与数据库相关的操作都可能返回不同类型的结果,因此我们需要在T
IPersistenceAction<T>
在Java中解释的相同:
public class Persistence implements IPersistence {
private IPersistenceState state; // Contains connection and statement
private boolean busy = false; // Indicates whether someone uses the object at the moment
public T runAction(IPersistenceAction<T> action)
{
T returnValue = null;
waitUntilIdle();
synchronized (this) {
busy = true;
returnValue = action.run(state);
busy = false;
notifyAll();
}
return returnValue;
}
...
}
这违反了Java语法。
但是从Java 7开始,Java语言规范中就有了闭包。
我是否可以使用它们来解决线程安全执行不同结果(不同T
s)的数据库操作的任务?
如果是,你能提供一个例子吗?
答案 0 :(得分:1)
您可以向方法添加泛型类型参数:
public <T> T runAction(IPersistenceAction<T> action);
<T>
将显示编译器,T是类型参数而不是Type本身。