多线程和持久性最佳实践

时间:2012-03-24 03:26:07

标签: java multithreading

我有多个线程(大约40个)访问java应用程序中几百个用户的持久变量(字符串和长整数)。存储这些变量的最佳方法是什么?读取和写入变量可能随时发生,我不仅要最大限度地减少CPU负载,还要减少因为正在编写变量不可用时的影响。

我正在考虑为每个用户创建一个文件,将该用户的所有变量转换为字符串,并在需要变量时写入或读取该文件。

...或为每个用户(密钥)创建HashMap并根据需要添加变量(值)。

是否有一种线程安全的方法来做到这一点,以确保每当线程请求变量时我可以确定它获得正确的值?

感谢。

2 个答案:

答案 0 :(得分:2)

你知道,我打算走出去,说使用ConcurrentHashMap。这是最大限度地减少争用的最佳方法之一,禁止使用Disruptor。既然你正在考虑使用HashMap,那么这里的好处是发生的锁定仅限于各个哈希行 - 哈希到不同区域的两个项不会相互阻塞。

答案 1 :(得分:0)

如果你的变量需要存储(即非易失性),我认为你应该只使用ACID DBMS(MySQL,PostgreSQL或你喜欢的任何一种),让DBMS处理并发。

如果您担心I / O会出现性能问题,那么大多数ORM框架都提供了延迟读取机制和读取/写入缓存,它们也是多线程安全的(即HibernateMyBatis