Java 使用闭包实现线程安全持久性
我有一个Java类负责与数据库的交互,还有几个对象,它们将同时访问数据库 因此,我必须确保在每个时间点,最多执行一个与数据库相关的操作 我打算在实现以下接口的类中实现这些操作:Java 使用闭包实现线程安全持久性,java,generics,java-7,Java,Generics,Java 7,我有一个Java类负责与数据库的交互,还有几个对象,它们将同时访问数据库 因此,我必须确保在每个时间点,最多执行一个与数据库相关的操作 我打算在实现以下接口的类中实现这些操作: public interface IPersistenceAction<T> { T run(final IPersistenceState aPersistenceState); } 实现IPersistence接口的类应该 等待连接可用(即没有其他人使用它) 运行一组特定的数据库相关操作,并 返
public interface IPersistenceAction<T> {
T run(final IPersistenceState aPersistenceState);
}
实现IPersistence
接口的类应该
IPersistenceAction
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;
}
...
}
公共类持久化实现IPersistence{
私有IPersistenceState;//包含连接和语句
private boolean busy=false;//指示当前是否有人使用该对象
公共T运行操作(IPersistenceAction操作)
{
T returnValue=null;
waitUntilIdle();
已同步(此){
忙=真;
returnValue=action.run(状态);
忙=假;
notifyAll();
}
返回值;
}
...
}
这违反了Java语法
但是自从Java7以来,Java语言规范中就有闭包 我是否可以使用它们来解决执行线程安全的数据库操作的任务,这些数据库操作具有不同的结果(不同的
T
s)
如果是,您可以提供一个示例吗?您可以向方法添加泛型类型参数:
public <T> T runAction(IPersistenceAction<T> action);
公共运行操作(IPersistenceAction);
将向编译器显示,T是一个类型参数,而不是类型本身。“自Java 7以来,Java语言规范中存在闭包”。链接这对我来说是全新的。我想你说的是Java8。这不是可以用一个操作队列和一个SingleThreadExecutor来解决的吗?以及未来的任务。公共运行操作(IPersistenceAction)代码>应该有效吗?@Pyranja这似乎是答案。请照样提交,我会接受的。所以最后,这是一个泛型问题,不是持久性问题,也不是线程安全问题。。。你能编辑问题的标签吗?
public <T> T runAction(IPersistenceAction<T> action);