Java集合类(线程安全与非线程安全)的效率问题 效率和异常是对双刃剑。如何取舍,就看你现实情况了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 就是不知道如何取舍,所以才来求解!希望能举例说明, 鱼和熊掌的问题了。比如竞标系统,系统不会太大,而且并发量也不会太高。这时候你就不需要去考虑空间管理等问题,速度和效率是第一位的。而如果是银行项目,如果效率和安全二选其一,你是程序员,你怎么选? 看你需要什么情况下用什么。 个人觉得具体问题具体分析~~~你说的有些宽泛~~~~ 其实Java集合用到了很多的数据结构,用不同的数据结构实现的Java集合类,当然在不同的场合中使用有不同的性能表现;下面简单说说你提到的这两个类似的java集合类在多线程下的效率问题(一般都是时间方面):首先Collections.synchronizedMap(new HashMap())和HashTable 都是同步集合,Collections.synchronizedMap采用的同步块实现,HashTable采用的是同步方法实现,在多线程环境下,一般认为是同步块好于同步方法;其次,说到多线程,那线程安全是很重要的,这两个同步集合对于一些常见的简单操作:如put, remove, get等,线程安全对于单个操作来说是没什么问题的,但对于一些复合操作来说,如同时put和remove,迭代等,要保证线程安全,就必须在使用时 同步加锁 了,也就是确保像 put和remove 是一个原子操作,当然两种Java集合类都采用hash算法实现,运行效率不会有什么大的区别;前面说到它们都是同步集合,也就是说在多线程下并发操作时,不管是简单的操作还是复合操作,为了线程安全,都是串行的操作,这样就会大大降低程序的效率,所以呢,并发集合ConcurrentHashMap出现了,这样即解决的并发问题,也解决了效率问题;最后,建议你在多线程下,就用ConcurrentHashMap吧,用它来替换你说的那两个同步集合;至于其他的集合类,就自己去学习了。 如何按下按钮同时改变标签的内容 初学JAVA遇到问题,class file has wrong version 49.0, should be 48.0 求java 对声音进行控制源码 求助,一个小程序 jni技术,本地代码中如何给JAVA中的int变量赋值 关于分页的问题 怎样在servlet里面调用servlet? 一个很菜的问题 请高手多指教啊 初学JAVA。。 人生茫然,不知何去何从,请各位指教 小问题,jDataStore是干什么用的。 异常 字符串中有多个不同该${变量名} 字符,如何快速取出?
比如竞标系统,系统不会太大,而且并发量也不会太高。
这时候你就不需要去考虑空间管理等问题,速度和效率是第一位的。
而如果是银行项目,如果效率和安全二选其一,你是程序员,你怎么选?
首先Collections.synchronizedMap(new HashMap())和HashTable 都是同步集合,Collections.synchronizedMap采用的同步块实现,HashTable采用的是同步方法实现,在多线程环境下,一般认为是同步块好于同步方法;
其次,说到多线程,那线程安全是很重要的,这两个同步集合对于一些常见的简单操作:如put, remove, get等,线程安全对于单个操作来说是没什么问题的,但对于一些复合操作来说,如同时put和remove,迭代等,要保证线程安全,就必须在使用时 同步加锁 了,也就是确保像 put和remove 是一个原子操作,当然两种Java集合类都采用hash算法实现,运行效率不会有什么大的区别;前面说到它们都是同步集合,也就是说在多线程下并发操作时,不管是简单的操作还是复合操作,为了线程安全,都是串行的操作,这样就会大大降低程序的效率,所以呢,并发集合ConcurrentHashMap出现了,这样即解决的并发问题,也解决了效率问题;
最后,建议你在多线程下,就用ConcurrentHashMap吧,用它来替换你说的那两个同步集合;
至于其他的集合类,就自己去学习了。