Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #31065
| From | Kevin McMurtrie <mcmurtrie@pixelmemory.us> |
|---|---|
| Newsgroups | comp.lang.java.programmer |
| Subject | Re: Concurrency question? |
| References | <maj766$qjf$1@dont-email.me> <mcmurtrie-36F639.22592131012015@news.sonic.net> <54ce6897$0$289$14726298@news.sunsite.dk> |
| Date | 2015-02-06 22:29 -0800 |
| Message-ID | <mcmurtrie-22B49E.22295006022015@news.sonic.net> (permalink) |
| Organization | Sonic.Net |
In article <54ce6897$0$289$14726298@news.sunsite.dk>, Arne Vajhøj <arne@vajhoej.dk> wrote: > On 2/1/2015 1:59 AM, Kevin McMurtrie wrote: > > In article <maj766$qjf$1@dont-email.me>, > > Knute Johnson <nospam@rabbitbrush.frazmtn.com> wrote: > >> So I have a Map<Integer,String> but it could be a List or an Array, > >> shouldn't make any difference. Access to the Map is controlled by a > >> ReadWriteLock. Several threads read values from the Map and one thread > >> can change values or write to or remove key/value pairs from the Map. > >> The thread that writes new values to the Map is the EDT, in a > >> DocumentListener. One of the reading threads is time consuming and if > >> that thread has the read lock the EDT blocks until it can obtain the > >> write lock. That can generate noticeable delays in data entry through > >> the GUI. > >> > >> Since data entry is slow it doesn't matter much if the data entry > >> changes are available during the time period that the time consuming > >> thread is reading the Map. However to ensure that I have current data > >> at some point any read access of the Map must be controlled by a read lock. > >> > >> I needed a way to make the time consuming thread not need to hold the > >> read lock for the entire time. My solution was to acquire the read lock > >> and create a List of values from the Map and return the read lock, this > >> is very quick. Then I iterate through the List to perform the time > >> consuming task. > >> > >> I know that it is possible that the GUI could change the Map while the > >> time consuming thread is running. That isn't critical as the data would > >> be current the next time the time consuming thread ran. The reference > >> to the List goes out of scope when the time consuming thread completes. > >> Any values that were in the List that were no longer in the Map should > >> be available for garbage collection. > > > > That's the usual way to do it. Perform a snapshot then use the snapshot > > at a leisurely pace without worry. > > > > Eric's recommendation of batch updates is an excellent solution for > > large data sets. > > > > I don't recommend ConcurrentHashMap EVER unless you need atomic > > conditional updates. The implementation is expensive and it's still not > > entirely lock free. You need a lot of concurrency from a lot CPU cores > > before you'll see it outperform the old Hashtable class. > > That is not my experience. CHM seems to be as fast or faster than Ht > in most cases I have seen. > > Arne size(), isEmpty(), and toArray() are slower and must allocate temporary objects. get() and put() can be comparable in speed to HashMap, minus some overhead for the internal sharding used to reduce lock scope. -- I will not see posts from astraweb, theremailer, dizum, or google because they host Usenet flooders.
Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Concurrency question? Knute Johnson <nospam@rabbitbrush.frazmtn.com> - 2015-01-31 10:34 -0800
Re: Concurrency question? Eric Sosman <esosman@comcast-dot-net.invalid> - 2015-01-31 14:04 -0500
Re: Concurrency question? Knute Johnson <nospam@rabbitbrush.frazmtn.com> - 2015-01-31 11:23 -0800
Re: Concurrency question? Arne Vajhøj <arne@vajhoej.dk> - 2015-01-31 14:12 -0500
Re: Concurrency question? Knute Johnson <nospam@rabbitbrush.frazmtn.com> - 2015-01-31 11:33 -0800
Re: Concurrency question? v_borchert@despammed.com (Volker Borchert) - 2015-01-31 19:20 +0000
Re: Concurrency question? Eric Sosman <esosman@comcast-dot-net.invalid> - 2015-01-31 15:42 -0500
Re: Concurrency question? Knute Johnson <eternal@knutejohnson.com> - 2015-01-31 19:51 -0800
Re: Concurrency question? Eric Sosman <esosman@comcast-dot-net.invalid> - 2015-02-01 09:24 -0500
Re: Concurrency question? Kevin McMurtrie <mcmurtrie@pixelmemory.us> - 2015-01-31 22:59 -0800
Re: Concurrency question? Arne Vajhøj <arne@vajhoej.dk> - 2015-02-01 12:55 -0500
Re: Concurrency question? Silvio <silvio@internet.com> - 2015-02-01 22:19 +0100
Re: Concurrency question? Kevin McMurtrie <mcmurtrie@pixelmemory.us> - 2015-02-06 22:29 -0800
Re: Concurrency question? Knute Johnson <eternal@knutejohnson.com> - 2015-02-07 10:14 -0800
Re: Concurrency question? Robert Klemme <shortcutter@googlemail.com> - 2015-02-08 19:33 +0100
Re: Concurrency question? olupot douglas <olupotd3@gmail.com> - 2015-02-07 01:06 -0800
Re: Concurrency question? Haddock <ffm2002@web.de> - 2015-02-16 06:32 -0800
csiph-web