Java多线程应用程序如何阻止对象对象?
是否在数据库行中阻塞了?
是否可以使用该表数据的公共列表?
答案 0 :(得分:1)
如果您使用的只是最基本的RDBM,那么他们将在数据级别处理并发更新。所以你在那里很好。但是,您仍然希望处理调用程序尝试根据陈旧数据进行更新的情况(这种情况在多用户系统中经常发生)。您可以通过多种方式执行此操作:
计算ETAG并在检索时将其返回给每个调用者 来自系统的实体信息。任何编辑/更新的电话 调用者必须使用ETAG返回保存请求 最初给出。然后在你的系统中读取持久化实体, 计算其ETAG,并确保其值等于调用者的值 已经给。如果不相等,那么你知道自从编辑以来已经进行了编辑 调用者检索数据,您可以引发错误。
如果您正在使用Hibernate,可以自动完成此操作 您可以利用其版本控制功能。您添加版本字段 您的数据库,以及您实体的带注释版本属性。 Hibernate将自动管理如此注释的实体,抛出一个 如果您尝试使用a更新实体,则为StaleObjectException 版本号小于数据库中对应的行。您 可以阅读有关here的更多信息。
希望有所帮助。
答案 1 :(得分:0)
您可能必须更具体地解释您的用例,但Java应用程序中的多线程完全独立于您的系统可能使用的任何数据库或其他外部资源。
要阻止来自另一个线程的对象进入给定方法,您可以“同步”该对象。
http://docs.oracle.com/javase/tutorial/essential/concurrency/sync.html