>>>>关于synchronized 同步的问题<<<< 在并发访问大的情况下为了防止出现获取的是脏数据所以需要采用 声明 synchronized 进行同步处理那么当并发访问量大的情况下使用synchronized 是否对系统开销很大?如果我通过程序去处理防止脏数据而不采用synchronized ,这2种方式哪种会好一些,为什么? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你就这个问题就相当于hibernte中的乐观锁和悲观锁,你看看这2个概念你就清楚了 synchronized会解决可见性问题、原子性问题、互斥访问你用程序怎么做?但一个visibility,还有比用同步机制更简单的办法吗?关于可见性的重要性见这里:http://www.ticmy.com/?p=5在锁竞争非常激烈的情况下,增加了大量的上下文切换,CPU需要耗费大量的资源来做这个事情,自然吞吐量会下降。在锁竞争不激烈的情况下,synchronized是没有太大影响的。即使并发非常大,也未必会出现大的锁竞争,这要看程序怎么实现了。 如果测试发现锁竞争很激烈,那么可以使用几种方式来减缓,比如:减小锁的粒度,譬如不相关的变量用不同的锁来保护;实现一些lock-free算法减少锁占用的长度,将不需要使用锁的代码移除出同步区域(当然,jvm锁粗化可能又将你移除出的代码移回去了,但这只是一种可能性)等等等等,诸如此类 synchronized 蛮容易出现同步锁 通常在一个多线程环境下,我们需要共享某些数据,但为了避免竞争条件引致数据出现不一致的情况,某些代码段需要变成原子操作去执行。这时,我们便需要利用各种同步机制如互斥去为这些代码段加锁,让某一线程可以独占共享数据,避免竞争条件,确保数据一致性。但可惜的是,这属于阻塞性同步,所有其他线程唯一可以做的就是等待。基于锁的多线程设计更可能引发死锁、优先级倒置、饥饿等情况,令到一些线程无法继续其进度。锁无关(Lock free)算法,顾名思义,即不牵涉锁的使用。这类算法可以在不使用锁的情况下同步各个线程。对比基于锁的多线程设计,锁无关算法有以下优势: 对死锁、优先级倒置等问题免疫:它属于非阻塞性同步,因为它不使用锁来协调各个线程,所以对死锁、优先级倒置等由锁引起的问题免疫; 保证程序的整体进度:由于锁无关算法避免了死锁等情况出现,所以它能确保线程是在运行当中,从而确保程序的整体进度; 性能理想:因为不涉及使用锁,所以在普遍的负载环境下,使用锁无关算法可以得到理想的性能提升。 http://www.ibm.com/developerworks/cn/java/j-lo-lockfree/?S_TACT=105AGX52&S_CMP=NL&ca=dnl-cn-07232008 我所说的不是共享同一个数据哦,大家可能理解错了。。我说的是并发去的从一个数据表中取数据,有可能相互之间会出现取同样的数据。所以提出采用synchronized 和程序处理的机制。 mysql+ibatis-2.3.4.726 出错 谁能给我一个精简后的jre 能运行一般的小的AWT就行!谢谢! 三表联合查询问题 急!急!急! hibernate 自关联修改出错 EJB2.0实体bean中findByPrimaryKey的菜鸟问题,请进! tomcat6.0 启动 报错 ,帮我分析一下 求J2EESDK下载 有关jboss部署ejb的问题. win2003下,不能浏览JavaApplet程序。 jaxp dom解析xml不支持中文吗? 谁知道JDF框架的,求讲解。。。 hibernate的hbm.xml生成数据库表问题。
实现一些lock-free算法
减少锁占用的长度,将不需要使用锁的代码移除出同步区域(当然,jvm锁粗化可能又将你移除出的代码移回去了,但这只是一种可能性)
等等等等,诸如此类
保证程序的整体进度:由于锁无关算法避免了死锁等情况出现,所以它能确保线程是在运行当中,从而确保程序的整体进度;
性能理想:因为不涉及使用锁,所以在普遍的负载环境下,使用锁无关算法可以得到理想的性能提升。 http://www.ibm.com/developerworks/cn/java/j-lo-lockfree/?S_TACT=105AGX52&S_CMP=NL&ca=dnl-cn-07232008