我正在开发一个使用 Java EE 开发的基于多线程的 Web 应用程序。
我在该应用程序中有两个线程,类似于生产者和消费者,其中一个线程不断地从第三方 API(套接字连接)读取数据,并将其更新到缓存中。另一个线程(消费者)不断尝试从缓存中读取。
我的问题是,当且仅当数据发生变化时,是否有任何方法可以提高消费者线程的性能(我的意思是它只从缓存中读取数据)。
我正在开发一个使用 Java EE 开发的基于多线程的 Web 应用程序。
我在该应用程序中有两个线程,类似于生产者和消费者,其中一个线程不断地从第三方 API(套接字连接)读取数据,并将其更新到缓存中。另一个线程(消费者)不断尝试从缓存中读取。
我的问题是,当且仅当数据发生变化时,是否有任何方法可以提高消费者线程的性能(我的意思是它只从缓存中读取数据)。
当然,使用BlockingQueue(例如选择一个实现ArrayBlockingQueue
)。它将阻塞(暂停)消费者调用take
,直到缓冲区中有可用数据。
有很多方法可以做。
生产者-消费者队列(Java 中的 BlockingQueue,正如 Tudor 所建议的那样)是一种方式。
你也可以使用 wait()/notify() 让消费者等待一个对象,生产者在有更新时通知消费者。从 Java5 开始,您甚至可以将 Condition 用于此目的。