{"id":12320,"date":"2017-03-14T17:50:16","date_gmt":"2017-03-14T16:50:16","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=12320"},"modified":"2017-03-14T17:50:16","modified_gmt":"2017-03-14T16:50:16","slug":"expiringmap-mappa-con-scadenza-in-java","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/expiringmap-mappa-con-scadenza-in-java\/","title":{"rendered":"ExpiringMap: mappa con &#8220;scadenza&#8221; in Java"},"content":{"rendered":"<p>Le strutture dati a mappa sono molto utili in Java in quanto permettono di inserire un nuovo valore accompagnato da una chiave per il suo recupero rapido. Tra l&#8217;altro, questo tipo di meccanismo si presta bene alla realizzazione di <em>cache<\/em> dove come\u00a0chiave viene\u00a0usato un riferimento univoco (indirizzo di rete, un percorso su filesystem, etc.) e per valore i dati di cui si vorr\u00e0 evitare il recupero ripetuto. Per\u00f2 una cache potrebbe avere bisogno di vedere le sue <em>entry<\/em> (accoppiata chiave\/valore) cancellate in automatico dopo un tempo prestabilito: implementare in proprio tale meccanismo potrebbe richiedere un p\u00f2 di lavoro e tempo\u00a0pertanto oggi conosciamo una\u00a0libreria molto utile che lo fa per noi, <a href=\"https:\/\/github.com\/jhalterman\/expiringmap\" target=\"_blank\">ExpiringMap<\/a>. Oltre al suo scopo primario, questo strumento si distingue\u00a0per efficienza e sicurezza, offrendo alte prestazioni in situazioni di concorrenza (\u00e8 infatti un&#8217;implementazione di <a href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/api\/java\/util\/concurrent\/ConcurrentMap.html\" target=\"_blank\">ConcurrentMap<\/a>).<\/p>\n<p>Dopo la sua integrazione nel progetto, la si inizializza\u00a0tramite <em>Builder<\/em> specificando &#8211; ad esempio &#8211; il tempo dopo il quale una chiave deve annullarsi:<\/p>\n<pre class=\"lang:java decode:true\">Map&lt;String, Connection&gt; map = ExpiringMap.builder()\r\n  .expiration(30, TimeUnit.SECONDS)\r\n  .build();<\/pre>\n<p>Oltre a ci\u00f2 sono stati previsti tutti i comportamenti pi\u00f9 comuni in casi del genere come il conteggio del tempo in base a momento di creazione o ultimo accesso, personalizzazione delle politiche per singola entry, uso di listener e molto altro.<\/p>\n<p>ExpiringMap \u00e8 uno di quegli strumenti efficienti, di piccole dimensioni, intuitivi ma che riescono a farci trovare risolto\u00a0un problema spinoso che potrebbe causarci pi\u00f9 di un grattacapo.<\/p>\n<p>Dovesse capitarvi di implementare una cache all&#8217;interno di un software, provate ad utilizzare questa classe e rimarrete sorpresi delle risorse di cui dispone.<\/p>\n<p>Alla prossima!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Le strutture dati a mappa sono molto utili in Java in quanto permettono di inserire un nuovo&#8230;<\/p>\n","protected":false},"author":561,"featured_media":12892,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[481],"tags":[1729,1732,1526,1731,1730],"class_list":["post-12320","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-risorse-utili","tag-cache","tag-hashmap","tag-java","tag-multithreading","tag-strutture-dati"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/12320","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/561"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=12320"}],"version-history":[{"count":2,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/12320\/revisions"}],"predecessor-version":[{"id":12326,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/12320\/revisions\/12326"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media\/12892"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=12320"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=12320"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=12320"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}