Multithreading 线程:让使用者线程仅在数据发生更改时读取数据

Multithreading 线程:让使用者线程仅在数据发生更改时读取数据,multithreading,Multithreading,我正在使用JavaEE开发一个基于多线程的Web应用程序 我在这个应用程序中有两个线程,类似于生产者和消费者,其中一个线程不断地从第三方API(套接字连接)读取数据,并将其更新到缓存。另一个线程(使用者)不断尝试从缓存中读取 我的问题是,当且仅当数据发生更改时,是否有任何方法可以提高使用者线程的性能(我的意思是它仅从缓存中读取数据)。当然,请使用(例如,选择类似ArrayBlockingQueue的实现)。它将阻止(挂起)消费者呼叫take,直到缓冲区中有可用数据。有很多方法可以做 生产者-消费

我正在使用JavaEE开发一个基于多线程的Web应用程序

我在这个应用程序中有两个线程,类似于生产者和消费者,其中一个线程不断地从第三方API(套接字连接)读取数据,并将其更新到缓存。另一个线程(使用者)不断尝试从缓存中读取


我的问题是,当且仅当数据发生更改时,是否有任何方法可以提高使用者线程的性能(我的意思是它仅从缓存中读取数据)。

当然,请使用(例如,选择类似
ArrayBlockingQueue
的实现)。它将阻止(挂起)消费者呼叫
take
,直到缓冲区中有可用数据。

有很多方法可以做

生产者-消费者队列(Tudor建议的Java中的aka BlockingQueue)是一种方式


您还可以使用wait()/notify()使使用者等待对象,生产者在有更新时通知使用者。从Java5开始,您甚至可以使用条件来实现此目的。

#1:定义数据更改。i、 e.每次发生更改时,“缓存”会发生什么变化?是否有添加到“缓存”的新数据记录需要处理#2:为什么是“缓存”?听起来你应该排队#3:您当前的实现是什么样子的?即使我使用BlockingQueue,它如何停止我的线程进行连续轮询,因为所有这些都发生在该线程的一段时间(真)条件内。请给出建议。@Preethi Jain:如果您在阻塞队列中调用
take
,并且没有任何项目,则调用线程将自动阻塞,直到队列中出现某个项目为止。不需要轮询。感谢Tudor,所以我可以使用阻塞队列进行管理,并且不需要在线程中使用wait和notify方法???@Preethi Jain:没错,阻塞队列已经在内部实现了类似的机制。