我正在处理一个负载很重的应用程序,并且希望能够异步地将数据放入缓存中。我的意思是调用缓存上的操作并接收表示结果的IgniteFuture<V>
。
我的意思是我需要能够从持久性存储中对数据提取进行并行化,并将它们放入缓存中。如果发生了什么事情,我可以尝试再次提取数据(没有太多的数据,非常精细)。
答案 0 :(得分:1)
如果你对.d2
(我认为不应该是)没有任何硬性要求,你想要的是将数据放入缓存并获取它的一些机制异步处理,然后处理该操作返回的结果,然后您可以使用Java's Executor Service。
如果您不太了解Java的执行程序服务,那么您可能需要阅读文档或this answer,其中突出显示了快速点,在下面的示例中,我还添加了注释。
以下是关于线程数的其他一些快速点:
span{
color:white;
display:block;/*Add this*/
}
&#34;创建IgniteFuture
实施时,还有其他选项,如&#34; ExecutorService
&#34;和&#34; ThreadPoolExecutor
&#34;它允许您在JVM中定义所需的线程数。Executors.newSingleThreadExecutor()
对象,如此Executors.newFixedThreadPool(10)
,您可以更多地控制线程和队列类型的数量。如果您想自己创建ThreadPoolExecutor
对象而不是return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
与您的实施相关的其他几点:
ThreadPoolExecutor
个对象时,它是阻塞进程,因为ExecutorService
是一个阻塞调用,因此您的主线程将被阻塞,直到返回并处理所有Future对象。Future
,你的线程将是空闲的,然后在你的Future.get()
对象中你可以将结果推送到队列中(你可以选择)根据您的需要Java's queue implementation然后从其他线程处理该队列。另一种选择可能是专门用另一个线程来处理你的Future对象。示例代码:
executorService.submit(callableTask1)