`
skylovehero
  • 浏览: 31627 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

合的线程安全问题

阅读更多
1.转载自:http://www.gzu521.com/campus/article/program/200704/145222.htm
Java代码 
vector是一种老的动态数组,是线程同步的,效率很低,一般不赞成使用。
五、线程安全类
在集合框架中,有些类是线程安全的,这些都是jdk1.1中的出现的。在jdk1.2之后,就出现许许多多非线程安全的类。
下面是这些线程安全的同步的类:
<STRONG>vector</STRONG>
:就比arraylist多了个同步化机制(线程安全)。
statck:堆栈类,先进后出。
<STRONG>hashtable</STRONG>
:就比hashmap多了个线程安全。
enumeration:枚举,相当于迭代器。
除了这些之外,其他的都是非线程安全的类和接口。
线程安全的类其方法是同步的,每次只能一个访问。是重量级对象,效率较低。
对于非线程安全的类和接口,在多线程中需要程序员自己处理线程安全问题。

分析:vector,因为效率较低,现在已经不太建议使用。

在web应用中,特别是前台页面,往往效率(页面响应速度)是优先考虑的。

(20090414追加)

2.转载自:http://topic.csdn.net/u/20090328/23/9f10c0de-1722-43d0-8c96-8ab1923270e7.html
Java代码 
hashtable跟hashmap的区别
hashtable是线程安全的,即hashtable的方法都提供了同步机制!
hashmap不是线程安全的,即不提供同步机制
hashtable不允许插入空值,hashmap允许!

3.转载自:http://mahuangyihao.iteye.com/blog/181156
Java代码 
线程安全的集合包含2个问题
1.多线程并发修改一个集合怎么办?
2.如果迭代的过程中集合被修改了怎么办?
a.一个线程在迭代,另一个线程在修改
b.在同一个线程内用同一个迭代器对象进行迭代、修改、迭代、修改...
共有有3种解决方案
1.用老的Vector/Hashtable类,上面2个问题都不用担心。
Vector/Hashtable所提供的所有方法都是synchronized的。如果迭代的过程中数据结构被修改了,迭代器可以反映最新的修改,也不会抛异常。但这种方法效率低下,不建议使用。
2.使用ArrayList/HashMap和同步包装器
可用同步包装器使容器变成线程安全的
Java代码
1.ListsynchArrayList=Collections.synchronizedList(newArrayList());<br>
2.MapsynchHashMap=Collections.synchronizedMap(newHashMap())<br>
ListsynchArrayList=Collections.synchronizedList(newArrayList());
MapsynchHashMap=Collections.synchronizedMap(newHashMap())
如果要迭代,需要这样
Java代码
1.synchronized(synchHashMap)<br>
2.{<br>
3.Iteratoriter=synchHashMap.keySet().iterator();<br>
4.while(iter.hasNext())...;<br>
5.}<br>
synchronized(synchHashMap)
{
Iteratoriter=synchHashMap.keySet().iterator();
while(iter.hasNext())...;
}
注意上面的代码每次进入同步块都生成了一个新的迭代器。如果你还用老的迭代器,2b的情况就可能发生,你会收到一个ConcurrentModificationException。
3.用java5.0新加入的ConcurrentLinkedQueue、ConcurrentHashMap、CopyOnWriteArrayList和CopyOnWriteArraySet
对这些集合进行并发修改是安全的。
针对2b的问题,迭代器既不抛异常,也不会反映新的修改。就是说你迭代的是生成迭代器时的容器,不是最新的容器。

分析(20090414追加):

方案1:Vector和HashTable都是线程安全的。

方案2:返回的都是经过封装(线程安全的)的list和map。

->将指定的list和map传进去,传出来的是经过线程安全处理的list和map。(20090507追加)
static <T> List <T>
synchronizedList (List <T>list)
Returns a synchronized (thread-safe) list backed by the specified list.
static <K,V> Map <K,V>
synchronizedMap (Map <K,V>m)
Returns a synchronized (thread-safe) map backed by the specified map.


方案3:这几个类都是位于java.util.concurrent 包中。(concurrent:并发的, 协作的, 一致的。也就是同步的意思。 )

①java.util.concurrent 包中的Class ConcurrentLinkedQueue<E>:An unbounded thread-safe queue based on linked nodes.(无界线程安全队列基于联系节点。)

②java.util.concurrent 包中的Class ConcurrentHashMap<K,V>:A hash table supporting full concurrency of retrievals and adjustable expected concurrency for updates.(哈希表的全面支持并发检索和可调预计并发更新。)

③java.util.concurrent 包中的Class CopyOnWriteArrayList<E>:A thread-safe variant of ArrayList in which all mutative operations (add, set, and so on) are implemented by making a fresh copy of the underlying array.(线程安全的变体的ArrayList中,所有变化的行动(购买,设置,等等)的实施作出了新的副本的基本元素。)

④java.util.concurrent 包中的Class CopyOnWriteArraySet<E>:A Set that uses CopyOnWriteArrayList for all of its operations.(一组使用CopyOnWriteArrayList其所有的业务。)

-》我经过的几个项目开发中,都没有使用过这几个类,很可能是自己的接触面比较狭窄,太孤陋寡闻了。(20090507追加)
分享到:
评论

相关推荐

    Java源码ssm框架的房屋租赁系统-合同-毕业设计论文-期末大作业.rar

    本项目是一个基于Java源码的SSM框架房屋租赁系统,旨在为房屋租赁市场提供一个便捷、高效、安全的管理平台。系统主要功能包括房屋信息管理、租赁合同管理、租金收取管理、租客信息管理等。通过该系统,房东可以轻松发布房屋信息,管理租赁合同和租金收取,而租客则可以方便地查找合适的房源,提交租赁申请,签订电子合同,并进行租金支付。系统采用SSM框架(Spring、Spring MVC、MyBatis)进行开发,确保了系统的稳定性和扩展性。Spring框架负责依赖注入和业务逻辑管理,Spring MVC处理前端请求和页面展示,MyBatis则用于数据库操作。项目还集成了权限管理、日志记录等模块,提升了系统的安全性和可维护性。项目为完整毕设源码,先看项目演示,希望对需要的同学有帮助。

    MDM Bypasser Tool激活锁并保存数据工具

    MDM Bypasser Tool激活锁并保存数据工具 绕过 iPhone 上的 iCloud 激活锁并保存您的数据。

    OC-Dialect线上多语言(多列表) 3.SDK每个方法解析

    OC-Dialect线上多语言(多列表) 3.SDK每个方法解析

    数学实验中MATLAB的应用技巧与实例解析

    内容概要:本文档围绕数学实验的MATLAB应用进行了详细介绍,涵盖了基本的四则运算、含有三角函数和指数函数的复杂运算、向量及其多种类型的运算方法(包括数乘、加减及点积计算)、不同方式实现的数的阶乘(普通脚本函数、递归函数以及直接利用MATLAB内置函数)和矩阵的基本及高级运算等多个方面的内容。每个部分都有25道练习题目帮助理解。 适合人群:面向对MATLAB感兴趣的学习者和有一定编程基础的研究者。 使用场景及目标:通过一系列具体的数学实验和编程训练,加深对于MATLAB这一强大科学计算工具的认识与掌握程度,能够灵活运用各种基本函数解决实际问题。 阅读建议:随着教程逐步深入,读者应在电脑上跟随指南亲自操作,以便更好地理解决定思路与具体步骤,将理论转化为实操能力。

    Java源码ssm框架汽车在线销售系统-毕业设计论文-期末大作业.rar

    本项目是一个基于Java源码的SSM框架汽车在线销售系统,旨在为汽车销售行业提供一个便捷、高效的在线交易平台。系统采用了Spring、Spring MVC和MyBatis三大框架技术,实现了前后端的分离与高效交互,确保了系统的稳定性和可扩展性。主要功能包括用户注册与登录、汽车信息展示、在线购车、订单管理、支付系统以及客户服务等。用户可以通过系统浏览各类汽车信息,进行在线咨询和购买,系统提供了详细的车型介绍、价格以及用户评价等信息,帮助用户做出更为明智的购车决策。订单管理模块允许用户查看和管理自己的购车订单,支付系统则支持多种支付方式,确保交易的安全与便捷。项目为完整毕设源码,先看项目演示,希望对需要的同学有帮助。

    小学数学游戏教学法中的常见问题及解决措施

    内容概要:本文围绕小学数学课程采用游戏教学法存在的若干问题展开讨论。作者详细列举了游戏内容偏离教学目标、游戏设计创新不足、游戏时间和难度不合理及选材不合适等问题,随后针对这些问题从学校管理、教师自主设计游戏、游戏规则制定及优化等多个维度提出了切实可行的解决策略。 适用人群:小学教师、教研员、教育行政管理人员。 使用场景及目标:适用于希望通过改进游戏化教学提升学生学习兴趣和效果的小学数学教育工作者,旨在解决现行小学数学游戏中遇到的具体难题。 其他说明:该文章不仅指出了当下小学数学游戏教学中普遍存在的缺陷,同时也为教育从业者提供了科学合理的改进思路与操作指南,对于推动数学游戏化教学的发展具有积极的意义。

    化学工程中无约束优化数值实验及参数估计研究

    内容概要:本文探讨了两个无约束优化问题及其相关数值实验。首先讨论了一阶反应动力学的参数估计问题,涉及线性常微分方程组的解及其与实验数据的最佳拟合。其次,详细分析了一个复杂的无约束优化问题,提供了多种求解方法(基本牛顿法、信赖域法、拟牛顿法)的结果和比较,旨在评估不同算法的性能。最后,作者对实验过程中遇到的问题及解决方案进行了总结,并分享了对无约束最优化算法的理解。 适用人群:适用于化学工程、数学建模和优化领域的研究人员及学生。 使用场景及目标:用于理解和应用各种无约束优化算法,提高科研工作者和学生的算法选择能力和实际操作经验。 其他说明:文中引用了多部权威教材和技术手册,如《数学规划基础》和《非线性规划:概念、算法及化工过程的应用》,为理论背景提供了可靠依据。此外,还提供了详细的数值实验步骤和算法实现细节,便于读者复现和深入研究。

    2024跨年烟花代码html/烟花代码大全html/跨年烟花源代码html(带音效)

    2024跨年烟花代码html/烟花代码大全html/跨年烟花源代码html【带音效】 效果演示https://www.lmtaolu.cn/biaobai/xkyanhua/ 跨年烟花代码html编程【过年放烟花特效代码+带音效】 新年烟花代码(纯js和html)可以随时嵌入项目的新年烟花代码,复制即可运行。 2024跨年烟花代码html/烟花代码大全html/跨年烟花源代码html【带音效】

    第十八届全国大学生智能汽车竞赛 智能视觉组比赛 视觉任务源代码+说明.zip

    第十八届全国大学生智能汽车竞赛 智能视觉组比赛 视觉任务源代码.zip,基于以上任务,我选择使用3个openart mini来解决。其中art1摄像头负责A4坐标纸的识别以及图像分类任务;art2负责校准车的位置;art3负责无框卡片的搜寻。任务的不同,三个art的位置和镜头也有所不同。art1位置最低,使得A4纸点坐标识别特别精准;同时art1镜头装配偏振片,减少因为比赛场地出现强光对图像分类造成影响;art2位置最高同时使用广角镜头,目的是增大视野范围,即使车的定位比较偏也足矣找到卡片并进一步校准;art3使用130°大角度镜头,同时倾斜放置,增大视野范围,能够以最快速度遍历全图。下面将详细讲解各个任务的实现细节。 第十八届全国大学生智能汽车竞赛 智能视觉组比赛 视觉任务源代码+说明.zip第十八届全国大学生智能汽车竞赛 智能视觉组比赛 视觉任务源代码+说明.zip第十八届全国大学生智能汽车竞赛 智能视觉组比赛 视觉任务源代码+说明.zip第十八届全国大学生智能汽车竞赛 智能视觉组比赛 视觉任务源代码+说明.zip第十八届全国大学生智能汽车竞赛 智能视觉组比赛 视觉任务源代码+说明

    欧姆龙CP1H+CIF11与施耐德ATV变频器通讯程序 功能:原创程序,可直接用于现场程序 欧姆龙CP1H的CIF11通讯板,实现对施耐德ATV12变频器 设定频率,读取实际频率,变频器状态功能

    欧姆龙CP1H+CIF11与施耐德ATV变频器通讯程序 功能:原创程序,可直接用于现场程序。 欧姆龙CP1H的CIF11通讯板,实现对施耐德ATV12变频器 设定频率,读取实际频率,变频器状态功能。 反应灵敏,通讯稳定可靠。 非常灵活方便。 同时解决了施耐德变频器断电重启后,自准备过程,无需人为再准备。 器件:欧姆龙CP1H,CP1W CIF11串口网关板,1台施耐德ATV12变频器,昆仑通态TPC7062KD触摸屏。 说明:是程序,带注释,带变频器手册,接线,参数设置都提供。 通讯稳定可靠,实用有效。

    教育技术学《Web应用开发》课程期末考查作品详细要求与指导

    内容概要:本文档详细介绍了教育技术学2021级《Web应用开发》课程期末考查的作品要求,主要涉及创建一个具有教育功能的动态网站,涵盖项目结构设计、用户界面展示、登录管理、用户和内容管理、日志记录等多个方面,以及详细的评分标准。 适合人群:针对教育技术学2021级的学生,尤其是修读《Web应用开发》课程的同学。 使用场景及目标:用于指导学生进行课程项目的选题与开发,确保项目符合教学目标和评分标准,最终完成高质量的作品并获得好的成绩。 阅读建议:仔细阅读每一条要求和评分细则,结合个人兴趣选定独特的教育主题,在规定的时间节点完成各项开发任务,并严格按照规范打包提交。建议边开发边测试,及时发现并解决问题。

    通用verilog串口控制器: 1.无奇偶校验,通过高低温等实验稳定运行,可靠性强,方便移植 2.提供整体工程,仿真,提供

    通用verilog串口控制器: 1.无奇偶校验,通过高低温等实验稳定运行,可靠性强,方便移植。 2.提供整体工程,仿真,提供。

    ST traction inverter

    ST traction inverter

    考务管理-JAVA-基于springBoot考务管理系统的设计与实现

    1. 用户管理 用户注册与登录:支持学生、教师及管理员通过邮箱或身份证号码注册和登录。 角色权限管理:根据用户类型(如学生、教师、管理员)设置不同的权限,确保信息安全与隐私保护。 2. 考试信息管理 考试安排管理:管理员可以创建、修改和删除考试安排,包括考试时间、地点、科目等信息。 考生信息录入:记录每位考生的基本信息,如姓名、学号、班级、联系方式等。 3. 考试报名 在线报名系统:学生可以在线选择所需报考的科目并进行报名,系统实时更新可用名额。 报名状态查询:学生可以查看自己的报名状态,包括已报名、待审核、审核通过等信息。 4. 考试资源管理 试题库管理:系统支持上传、编辑和分类各种类型的试题,方便后续调取与使用。 试卷生成:根据设定的规则和标准,从试题库中自动生成试卷,并生成PDF文件供打印。 5. 考试监控与管理 考场安排:管理员可以根据考生人数和考场数量合理安排考场,并分配监考老师。 监考记录:监考人员可在系统上记录考生的出勤情况以及考试中的违规行为。 6. 成绩管理 成绩录入:教师可在系统内录入考生的考试成绩,支持批量导入和手动输入。 成绩查询:学生可随时查询个人的考试成绩,

    实验教学资料:深入理解HTTP协议的应用及其各部分组成

    内容概要:该文档详细讲解了HTTP协议的概念以及其实现方式,包括HTTP协议的基本构成(GET/POST请求方法的区别、响应代码解读),并通过实验的形式探讨HTTP无状态特性以及cookie和session的作用和原理。通过具体实验步骤引导读者掌握HTTP Cookie, session, Authorization(授权)和cache(高速缓存)的知识点。此外,文档还通过实例讲解了HTTP响应的不同部分(Date, Content-Length, Content-Type等首部含义)。 适合人群:适用于希望深入了解和掌握HTTP协议的高年级本科生或者IT行业的技术人员。 使用场景及目标:通过实际的操作,帮助学习者更加直观地理解HTTP协议的工作机制,加深理论知识的理解,能够更好地应用于网络应用程序的设计与优化。 其他说明:为了达到最好的学习效果,推荐结合Wireshark软件来捕捉和分析网络流量,以实践验证理论知识点。在实验过程中,可以重点关注不同请求与响应之间的关系及其背后的机制。

    rabinovich_3dj_01_230116.pdf

    rabinovich_3dj_01_230116

    微信小程序源码-在线投稿系统-微信端-毕业设计源码-期末大作业.zip

    本项目是一个基于微信小程序的在线投稿系统,旨在为校园内的学生、教师及外部作者提供一个便捷、高效的投稿平台。系统主要功能包括用户注册与登录、稿件提交、稿件审核、通知反馈以及作者后台管理等。用户可以通过小程序界面直接提交稿件,包括文本、图片和附件等形式,系统后台会对提交的内容进行审核,审核结果将通过微信通知及时反馈给作者。此外,管理员可以在后台管理系统中查看所有提交的稿件,并进行审核操作,确保稿件质量。 项目采用前后端分离的开发模式,前端使用微信小程序原生框架,确保良好的用户体验和流畅的操作。后端采用Node.js搭建,使用Express框架处理业务逻辑,数据库则使用MongoDB存储用户数据和稿件信息。项目的开发不仅提升了校园内外的投稿效率,也为学生提供了一个实践技术、锻炼能力的平台。

    君正lngenicT31芯片资料

    T31芯片

    FPGA实现 CIC抽值滤波 滤波器 verilog 仿真和matlab simulink仿真 vivado ise quartus软件均可以,匹配滤波器系数生成等 含说明 doc,电子ZL出不 ,这

    FPGA实现 CIC抽值滤波 滤波器 verilog 仿真和matlab simulink仿真 vivado ise quartus软件均可以,匹配滤波器系数生成等 含说明 doc,电子ZL出不 ,这个需要一定的数字信号处理知识和熟练操作相应软件,目前还做不到手把手的教,不太熟练的,发vivado工程,一键跑程序得出图1和图3所示

    基于springboot的高校毕业生实习及就业去向信息管理系统源码(java毕业设计完整源码+LW).zip

    该系统从三个对象:由管理员和学生、企业信息来对系统进行设计构建。 主要功能包括:个人信息修改,对系统用户、招聘信息、实习、问卷调查等功能进行管理。 环境说明: 开发语言:java JDK版本:jdk1.8 框架:springboot 数据库:mysql 5.7/8 数据库工具:navicat 开发软件:eclipse/idea

Global site tag (gtag.js) - Google Analytics