Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 订阅通知事件semilar to Observer模式_Java_Multithreading_Concurrency_Wait_Observer Pattern - Fatal编程技术网

Java 订阅通知事件semilar to Observer模式

Java 订阅通知事件semilar to Observer模式,java,multithreading,concurrency,wait,observer-pattern,Java,Multithreading,Concurrency,Wait,Observer Pattern,在我问我的问题之前,我想说,我知道有很多半音问题。但它们并没有真正涵盖我的场景,因为我想马上展示 我面临以下情况: 有一个数据库类,它是另一个类的私有类,我称之为DBMS DatabaseManagementSystem,它提供对数据库的安全读/写访问。还有一门课我要叫消费者 DBMS和使用者运行自己的线程。DBMS线程只是获取排队的数据并将其写入数据库。使用者处理数据库管理系统提供的数据库中的数据 经典的生产者-消费者模式,中间有一个线程安全队列(在这里的其他问题中建议),在这里并不真正适用,

在我问我的问题之前,我想说,我知道有很多半音问题。但它们并没有真正涵盖我的场景,因为我想马上展示

我面临以下情况:

有一个数据库类,它是另一个类的私有类,我称之为DBMS DatabaseManagementSystem,它提供对数据库的安全读/写访问。还有一门课我要叫消费者

DBMS和使用者运行自己的线程。DBMS线程只是获取排队的数据并将其写入数据库。使用者处理数据库管理系统提供的数据库中的数据

经典的生产者-消费者模式,中间有一个线程安全队列(在这里的其他问题中建议),在这里并不真正适用,因为这样我需要将数据库中的所有数据复制到一个线程安全队列或另一个线程安全结构中。这与提供对数据库安全访问的DBMS的设计不太相符。 此外,除此之外,大多数情况下,使用者将等待数据库中的新更改,而单个使用者只需要存储在数据库中的少量数据,因此将所有数据推送到使用者将产生大量不必要的开销

总结如下:

理想情况下,使用者会等待数据库发生变化,然后得到DBMS的通知,最后读取所需的数据并进行处理

我的计划:

我想实现一种观察者模式。因此,每个使用者在完成数据处理后都将自己置于等待状态,并在数据库发生更改时收到DBMS的通知。使用者可以订阅以从DBMS接收通知事件

现在我的问题是:是否有一种模式涵盖了这种情况?或者有人实施了一个塞米拉设计,并为我提供了一些建议

由于这更像是一个设计问题,我不太确定这是否重要,但我正在使用JavaJDK8

多谢各位,
Flo

为什么需要复制数据库中的所有数据?仅将更新放入队列是否足够?不完全是因为在进行更改后,更改的数据可能不是使用者需要的唯一数据。最有可能的是,任务的代码将实现多种模式,共同工作。似乎更具建设性的方法是编写代码草图并将其发布到codereview.SE,或者类似的东西。简而言之,从代码片断开始。对于消费者得到通知,使用,考虑使用库,是一个很好的解释。