gpt4 book ai didi

java - 使用闭包实现线程安全持久性

转载 作者:行者123 更新时间:2023-12-01 14:20:45 25 4
gpt4 key购买 nike

我有一个负责与数据库交互的 Java 类,以及几个将同时访问它的对象。

所以,我必须确保在每个时间点,最多执行一个与数据库相关的操作。

我打算在实现以下接口(interface)的类中实现这些操作:

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的类界面应该

  1. 等待连接可用(即没有其他人使用它),
  2. 运行一组特定的数据库相关操作
  3. 返回操作结果。

请注意,每个与数据库相关的操作都可能返回不同类型的结果,因此我们需要指定其类型 TIPersistenceAction<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)吗?

如果是的话,您能举个例子吗?

最佳答案

您可以向方法添加泛型类型参数:

public <T> T runAction(IPersistenceAction<T> action);

<T>将向编译器显示 T 是类型参数,而不是类型本身。

关于java - 使用闭包实现线程安全持久性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17587335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com