- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个网页,其中包含一些动态生成的图像。
在我的页面请求处理中,我创建所有图像并将它们存储在内存缓存中,直到浏览器随后请求它们。
public class CachedImage
{
byte[] data;
Date created;
}
目前,我的图像缓存本质上是 HashMap<Integer, CachedImage>
.
问题是图像生成需要时间,我想在所有图像完成生成之前开始渲染页面。
所以我想在线程池中生成图像,并在收到请求时返回数据(如果准备好)或等待数据准备好然后返回。
有人能为这个机制想出一个简洁的模型吗?
图像很小,我对目前将整个图像缓存在内存中的方法感到满意。
最佳答案
生成页面时,为页面将显示的每个图像选择一个新的唯一标识符。这可能很简单,比如通过递增 AtomicInteger 获得的数字。 ,或者可能是更复杂的东西,例如 UUID,以防止用户猜测其他用户的图像 URL。将这些唯一标识符放入客户端将用于检索图像的 URL 中。
选择图像的标识符后,构建一个将生成并返回图像的 Callable,并将其提交到 ThreadPoolExecutor异步运行。这会返回 Future可用于检索结果。将 future 保存在 map 中,以图像的标识符作为键。
稍后,当客户端请求图像时,您可以获取图像标识符并在映射中查找它以找到关联的 Future 对象。对 Future 调用 get()
将返回图像,并在必要时等待生成器完成。 (如果在 map 中找不到请求的标识符,则返回 404 错误。)
为了避免旧图像填满服务器内存,您可能希望在几分钟后丢弃它们。为此,每次创建任务并将其 Future 存储到可用图像映射中时,您可以将任务放入 DelayQueue 中。经过一段适当的延迟后,这将从 map 中删除该条目。使用守护线程从该队列中获取项目并在循环中对它们进行操作。
从 map 中删除 Future 时,最好对 Future 调用 cancel(true)
,以防生成器由于某种原因仍在运行。 (否则,即使图像无论如何都不再可访问,它将继续运行。)
关于java - 如有必要,等待结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1878680/
我正在使用 this solution在二进制矩阵中找到与图像边界对齐的矩形。假设现在我想找到一个不与图像边框对齐的矩形,并且我不知道它的方向;找到它的最快方法是什么? 为了示例,让我们寻找一个仅包含
else: 行在这个 Python 程序中是否正确/必要? from random import randrange for n in range(10): r = randrange(0,1
在 TDPL 7.1.5.1 中讨论了将 Widget w2 分配给 w1 并且作者指出“将 w2 逐个字段分配给 w1 会将 w2.array 分配给 w1.array——一个简单的数组边界分配,而
我是一名优秀的程序员,十分优秀!