{"version":"1.0","height":"190","type":"rich","blog_url":"https://blog1.mammb.com/","title":"Java Concurrency in Practice \u306b\u304a\u3051\u308b\u30e1\u30e2\u30a4\u30bc\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5","published":"2011-01-06 23:59:05","author_url":"https://blog.hatena.ne.jp/Naotsugu/","width":"100%","provider_url":"https://hatena.blog","description":"Java Concurrency in Practice \u306b\u304a\u3051\u308b\u30b9\u30ec\u30c3\u30c9\u30bb\u30fc\u30d5\u306a\u30e1\u30e2\u30a4\u30bc\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5\u3002\u305d\u306e\u307e\u307e\u3067\u3059\u3002 A \u304c\u5165\u529b\u3001V \u304c\u51fa\u529b\u306e\u578b public interface Computable<A, V> { V compute(A arg) throws InterruptedException; } Memoizer \u306f ConcurrentHashMap \u3068 Future \u306e\u5229\u7528\u306b\u3088\u308a synchronized \u306e\u540c\u671f\u51e6\u7406\u304c\u4e0d\u8981\u3002\u9ad8\u4fa1\u306a\u8a08\u7b97\u51e6\u7406\u306e\u7d50\u679c\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u3002 public class Memoizer<A, V> implements Computable<A, V> \u2026","blog_title":"A Memorandum","provider_name":"Hatena Blog","image_url":null,"author_name":"Naotsugu","html":"<iframe src=\"https://hatenablog-parts.com/embed?url=https%3A%2F%2Fblog1.mammb.com%2Fentry%2F20110106%2F1294325945\" title=\"Java Concurrency in Practice \u306b\u304a\u3051\u308b\u30e1\u30e2\u30a4\u30bc\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5 - A Memorandum\" class=\"embed-card embed-blogcard\" scrolling=\"no\" frameborder=\"0\" style=\"display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;\"></iframe>","url":"https://blog1.mammb.com/entry/20110106/1294325945","categories":["Java"]}