java同步读写,关于java:Collections中的synchronizedMap方法是否同步读写操作

本问题已经有最佳答案,请猛点这里访问。

当我做一个收藏.同步DMAP(Somehashmap)时,所有的都可以进入同步地图吗?还是只写同步操作?如果从地图上读到两条线怎么办?威尔是同步的吗?似乎有必要如果一个螺纹被放置()而另一个螺纹被放置(),该怎么办?

因为Collections.synchronizedMap非常基本,几乎不能使用。还有用于更严重的并发使用的ConcurrentHashMap。

看一下包装您的Map的SynchronizedMap的源代码。

...

public V get(Object key) {

synchronized (mutex) {return m.get(key);}

}

public V put(K key, V value) {

synchronized (mutex) {return m.put(key, value);}

}

public V remove(Object key) {

synchronized (mutex) {return m.remove(key);}

}

... // more methods synchronized in the same way

public static Map synchronizedMap(Map m) {

return new SynchronizedMap<>(m);

}

所以,是的,所有访问都是同步的。

但不幸的是,读写在内部互斥体上是同步的,这使得外部代码在持有锁的同时无法在实体上迭代。编辑:Sotirios和Affe是正确的,我的评论应该被忽略。

JavaDoc就是这么说的:It is imperative that the user manually synchronize on the returned map when iterating over any of its collection views:...

互斥体实际上就是"this",它的编写方式很简单。同步映射以使其正常迭代。

代码在mutex而不是直接在this上同步的原因是代码与SynchronizedSortedMap共享,需要支持返回在父映射上同步的子映射。见Collections.SynchronizedSortedMap.subMap。

@我知道,我只是说明了为什么这些方法不是以public synchronized someMethod...的形式编写的。它不仅仅是惯用的,它是为了支持返回通过synchronizedMap的第二个构造函数在父映射上同步的synchronizedMap。

@增量1误解了您的评论。意味着方法是同步的。

@Sotiriosdelimanolis不用担心,我实际上是在回应affe的评论(关于mutex的使用是惯用的),我应该恰当地回答我的评论。

是的,它同步所有操作。它不使用多个读卡器、单写程序的方法——它就像通过一个监视器同步所有访问一样简单。

集合上的所有方法调用都已同步。一次只允许一个线程读取/修改集合。

集合中的synchronized*方法不是设计为最佳的线程安全版本/实现。他们只是为了方便。

同步是一个困难的问题,通常需要根据您的特定场景使用不同的同步方法。如果您需要其他类型的线程安全性,那么还有许多其他的线程安全集合可用。您也可以自己编写同步逻辑。

读和写都是同步的,这是确保可见性所必需的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/417762.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sqlserver备份还原后数据库关系图无法显示问题

执行该条sql语句后就行了 EXEC sp_changedbowner sa

php.ini 安全配置

(1) 打开php的安全模式 php的安全模式是个非常重要的内嵌的安全机制&#xff0c;能够控制一些php中的函数&#xff0c;比如system()&#xff0c;同时把很多文件操作函数进行了权限控制&#xff0c;也不允许对某些关键文件的文件&#xff0c;比如/etc/passwd&#xff0c;但是默认…

mac 删除php56 安装php72,mac php56升级php70

//安装PHP7命令&#xff1a;$ brew install php70//删掉以前安装的PHP5.6//你可以根据自己的情况来修改命令&#xff1a;$ brew unlink php56命令&#xff1a;$ brew link php70//大功告成$ php -v PHP 7.0.0(cli) (built:Dec2 2015 13:06:23) ( NTS )Copyright(c) 1997-2015 T…

sqlserver注释巧清理

生成表创建语句 Excel公式过滤EXEC sys.sp_addextendedproperty IF(LEFT(A1,9)"EXEC sys.",A1,"") 正则替换EXEC sys.sp_addextendedproperty \nameNMS_Description, \valueN[^]? ,EXEC sys.sp_dropextendedproperty \nameNMS_Description, 删除数据库关…

CMS收集器

CMS收集周期CMS并非没有暂停&#xff0c;而是用两次短暂停来替代串行标记整理算法的长暂停&#xff0c;它的收集周期是这样&#xff1a;初始标记(CMS-initial-mark) -> 并发标记(CMS-concurrent-mark) -> 重新标记(CMS-remark) -> 并发清除(CMS-concurrent-sweep) -&g…

php删除二位数组相同元素,删除去除二维数组中相同元素与数组重复值实例-PHP源码...

《script》ec(2);《script》$list array(array(id>107,title>aaa),array(id>106,title>bbb),array(id>105,title>ccc),array(id>104,title>ccc),array(id>103,title>ddd),array(id>102,title>eee),array(id>101,title>fff),);funct…

Sql Server中查看/修改identity(自增列)的值

查看某个表中的自增列当前的值&#xff1a;DBCC CHECKIDENT (TableName) 修改某个表中的自增列当前的值&#xff1a;DBCC CHECKIDENT (TableName, RESEED, value) 比如我要把 Division 表中的 自增列 的当前值改为 30 可以用如下命令 DBCC CHECKIDENT (Divisio…

activiti jbpm相关资源

Activiti 5.16 用户手册 http://www.mossle.com/docs/activiti/index.html jBPM 4.4开发指南 http://www.mossle.com/docs/jbpm4devguide/html/index.html head first process 深入浅出流程 http://blog.csdn.NET/ronghao100/article/category/662142 Fixflow引擎解析(一)(介绍…

matlab绘制贝叶斯曲线,Matlab建立SVM,KNN和朴素贝叶斯模型分类绘制ROC曲线

原文链接&#xff1a;http://tecdat.cn/?p15508绘制ROC曲线通过Logistic回归进行分类加载样本数据。load fisheriris通过使用与versicolor和virginica物种相对应的度量来定义二元分类问题。pred meas(51:end,1:2);定义二进制响应变量。resp (1:100)>50; % Versicolor 0,…

4400php兑换美金是多少,美金换算人民币怎么算(美金换人民币怎样计算)

这些东西我真的不懂 教我怎么计算就可以了你手上是现金的话就用 美元数乘以现钞买入价人民币数 如果是国外汇过来的现汇(存在账户里) 就用美元数乘以现汇买入价人民币数 具体牌价请看中国银行牌价 http://.按当天汇率计算啊。 比如说你有一百美元&#xff0c; 今天的汇率是687.…

Xcode8更新约束

Xcode升级之后就会发现约束设置好&#xff0c;想更新一下约束&#xff0c;看看约束是不是刚刚好&#xff0c;习惯性的去点右下角的更新约束的结果却发现没有更新约束的这一项了&#xff0c;好尴尬。 后来发现原来在Xcode8的约束更新换了一个地方&#xff0c;并不是在原来的右下…

VS2010如何在编辑器自动换行

1.在“工具”菜单上选择“选项”。 2.在“文本编辑器”文件夹中&#xff0c;选择“所有语言”子文件夹中的“常规”选项&#xff0c;以便在全局设置此选项。 - 或 - 在您所使用的编程语言的子文件夹中&#xff0c;选择“常规”选项。 3.在“设置”下&#xff0c;选择或清除“自…

ie 调用java的时候报错,调用javabean的非常郁闷的异常。

当前位置:我的异常网 Java Web开发 调用javabean的非常郁闷的异常。调用javabean的非常郁闷的异常。www.myexceptions.net 网友分享于&#xff1a;2013-09-12 浏览&#xff1a;18次调用javabean的非常郁闷的错误。。急&#xff01;&#xff01;&#xff01;我已经做了测试 …

WinForm------GridControl单元格内容修改外表样式

private void gridView1_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e) {if (e.Column.FieldName "Examine"){if (e.DisplayText.Equals("已审批")){e.Appearance.ForeColor Color.Red;}else{e.Appearan…

Visual Studio 2008 安装失败(“Web 创作组件”无法安装)解决方法

今天安装VS2008时出现了问题&#xff0c;怎么都无法安装成功。装了好几次都在“Visual Studio Web 创作组件&#xff08;Visual Studio Authoring Component&#xff09;”的安装的时候失败。解决方法&#xff1a;1、使用Windows Installer 清理实用工具&#xff0c;清理Micros…

open()的模块

对文件操作流程&#xff1a; 1、打开文件&#xff0c;得到文件句柄并赋值给一个变量 2、通过句柄对文件进行操作 3、关闭文件 mode can be&#xff1a; * ‘r’ 只读。 * ‘w’ 写入&#xff0c;如果之前有就覆盖 * ‘a’ 追加。 表格&#xff1a; mode文件不存在文件存在读写…

matlab中xtem,快速傅里叶变换_蝶形运算_按频率抽取基2-fft算法_MATLAB代码

function yMyFFT_FB(x,n)%MYFFT_TB:My Fast Fourier Transform Frequency Based%按频率抽取基2-fft算法%input:% x -- 输入的一维样本% n -- 变换长度&#xff0c;缺省时 nlength(x) 当n小于x数据长度时&#xff0c;x数据被截断到第n个数据 % 当n大于时&#xff0c;x数据在尾部…