首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >ArrayList、线程和同步-如何对多个线程精确地同步

ArrayList、线程和同步-如何对多个线程精确地同步
EN

Stack Overflow用户
提问于 2011-05-27 01:35:51
回答 6查看 5.7K关注 0票数 3

再一次提出关于ArrayList和同步的问题。

我只想知道这个片段到底是做什么的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ArrayList<ObjectX> list = ....;

synchronized (list) {
    if (list.contains(objectxy) == false) {
      list.add(objectxy);
    }
}

我有一个充满ObjectX的ArrayList。然后,我想向列表中添加一个元素,但前提是该列表不包含相同的元素。我之前(在另一种方法中)检查了列表是否包含对象-结果是否。但是,有可能两个线程同时认为结果为no,并且它们都试图添加objectxy。(还有一些其他的事情必须在中间做,这就是为什么我不能同步整个过程)

所以,在进程之后,当线程来到上面的片段时,我希望防止这两个线程都将对象添加到列表中。所以我想,当我同步访问列表时,只有一个线程可以检查它是否包含对象,然后添加它。之后,第二个线程可以访问列表,查看对象已经在其中,并且不再添加它。

这就是我想要达到的目标。会成功吗? :-)

所以,如果是的话,我想知道这个片段到底是做什么的。是否阻止两个线程同时访问此精确的代码?这样代码只能同时用于一个线程吗?

还是将列表本身锁定为,对于应用程序中正在尝试访问列表的线程-- anywhere?(我的代码中没有其他add(),但很多是get (),这就是为什么我想知道其他线程是否可以访问列表,并在另一个线程访问上面的代码时仍然获取元素)。

ArrayList本身是一个成员变量,它使用应用程序与主体连接。如果多个线程不是从同一个主体发送的,那么多个不同的线程可以同时访问上面的代码,对吗?

所以,这就是我想知道的。我试着标记我的问题,以便更容易地回答它们。谢谢你的帮助:)

编辑谢谢你所有的答案,这几乎都说了同样的话!我想现在已经很清楚了!

  • 同步代码块只能由一个主体线程访问。(其他主体的线程与特定主体无关)。列表本身可以在任何时候从其他线程访问--只要对它的访问没有与同步块同步。如果是,则线程必须等到可以访问列表(这意味着同步块中没有其他线程同时存在)。

对,是这样?我希望如此:)

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-05-27 01:43:55

同步块保证只有一个线程可以执行此代码块,或者在同一对象(即列表)上同步的任何其他代码块。例如,如果你有

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
synchronized (list) {
    // block A
}

synchronized (list) {
    // block B
}

,如果一个线程正在执行块A,则没有其他线程可以执行块A或块B,因为它们在同一个对象上都是同步的。但名单本身并没有锁定。另一个线程可能访问列表。

票数 3
EN

Stack Overflow用户

发布于 2011-05-27 01:42:56

你差不多有了。synchronized阻止锁定同一list对象的其他线程同时运行它们的代码块。它不会锁定list对象本身。如果其他线程没有在同一个对象上进行同步,它们仍然可以访问它。

票数 5
EN

Stack Overflow用户

发布于 2011-05-27 01:43:16

是的,一次只有一个线程可以访问该代码块。所有其他线程都将等待,直到先到达的线程完成代码块的执行。

另外,您关于用户主体的假设也是正确的。如果您的数组列表是每个用户一个(主体),那么只有与该用户(主体)一起执行的线程才能在该特定数组列表上同步。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6150391

复制
相关文章
关于Python可视化Dash工具-dash核心组件和html组件
关于Python可视化Dash工具,不能不提dash核心组件和html组件,用户可以使用Python结构和dash-html-components库来构建布局,而不是编写HTML或使用HTML模板引擎 。dash-html-components库和标准的html还是有点区别的。以下内容来自dash官网的介绍:
python与大数据分析
2022/03/11
1.5K0
关于Python可视化Dash工具-dash核心组件和html组件
Dash应用页面整体布局技巧
大家好我是费老师,对于刚上手dash应用开发的新手朋友来说,如何进行合理且美观的页面整体布局构建是一道“难题”。今天的文章中,我就将为大家介绍有关dash应用页面布局的一些实用技巧,并附上几个可以直接套用的dash应用经典页面模板,话不多说,let's go🚀
Feffery
2023/07/10
6010
Dash应用页面整体布局技巧
MPEG DASH更新
本文是来自MHV(Mile High Video)2019的演讲,演讲的作者是来自Tencent America的Iraj Sodagar,同时Iraj也是MPEG DASH小组主席、DASH-IF主席。本次演讲主要展示 了未来将要发布的MPEG DASH第四版新增的功能。
用户1324186
2019/09/08
7950
murmurhash算法_shell dash使用数组
MurmurHash 是一种非 加密型 哈希函数,适用于一般的哈希检索操作。 由Austin Appleby在2008年发明, 并出现了多个变种,都已经发布到了 公有领域(public domain)。与其它流行的哈希函数相比,对于规律性较强的key,MurmurHash的随机分布特征表现更良好。—摘自wiki
全栈程序员站长
2022/11/02
5190
Python+Dash快速web应用开发——页面布局篇
❝本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes ❞ 1 简介 这是我的系列教程「Python+Dash快速web应用开发」的第二期,在上一期中,我带领大家认识了什么是Dash,Dash可以做什么,以及Dash中最基本的一些概念,而今天开始,我将开始带领大家正式学习有关Dash的实用知识,以及各种奇淫巧技😋~ 图1 今天的文章,我将带大家学习Dash中「页面布局」的先进方法,通过今天的文章,你将学会以非常简单
朱卫军 AI Python
2022/04/03
4.2K0
Python+Dash快速web应用开发——页面布局篇
Dash学习记录1
Dash是用于构建Web分析应用程序的高效Python框架。Dash是写在Flask,Plotly.js和React.js之上,是使用纯Python的高度自定义用户界面构建数据可视化应用程序的理想选择。它特别适合使用Python处理数据的任何人。通过几个简单的模式,Dash提取了构建基于Web的交互式应用程序所需的所有技术和协议。 Dash非常简单,仅仅需要一个下午写Python代码就可以完成。
用户1359560
2021/03/04
3K1
Dash学习记录1
低延迟DASH流
本文来自Seattle Video Tech November 2020,主讲者是Brightcove Video Research小组的视频系统工程师Bo Zhang,进行演讲。这次将介绍的是使用开放源代码工具的低延迟DASH流。
用户1324186
2021/01/25
1.3K0
如何在Ubuntu Dash隐藏应用程序?
这个简短的指南说明了如何在Ubuntu dash中隐藏应用程序。当您在Ubuntu桌面系统上安装新应用程序时,将创建一个相应的菜单项(即启动器)并将其放置在Dash或Application菜单中以便快速访问。应用程序启动器不过是带有.desktop扩展名的简单文本文件。扩展名为 .desktop,充当启动应用程序的快捷方式。
用户6543014
2020/05/04
3.1K0
k8dash介绍
k8dash[1](发音为“Kate dash”)是一个开源的Kubernetes仪表板,可以帮助你直观地理解集群的概念。通过仪表板,你可以管理集群的组件,并深入了解其运行状况和生存能力。
CNCF
2021/03/15
9540
k8dash介绍
技术解码 | DASH协议直播应用
导语 | 本文介绍了DASH协议,并分享了腾讯云直播系统在DASH协议功能实现和灰度验证中积累的经验、遇到的问题以及解决的思路。 - 协议介绍 - 在对海外各大OTT流媒体平台的调研中,我们可以了解到海外流媒体常用的协议有Facebook、Twitch等平台使用的、由Apple提出的HLS协议,微软在其名下各个平台上使用的、由其制定的MSS协议以及Adobe为各大企业提供媒体服务支持时使用的、其制定的HDS协议等等。 因此在海外音视频领域的流媒体协议应用中,各种协议五花八门。而为了在
腾讯云音视频
2021/11/01
6.3K0
实时OTT中DASH的优化
本文是来自Seattle Video Tech的演讲,演讲者是来自Hulu的视频平台架构师Zachary Cava,演讲的题目“Scaling Live OTT with DASH”。
用户1324186
2020/03/06
6940
基于DASH扩展实时OTT服务
本文是来自MHV(Mile High Video)2019的演讲,作者是来自于Hulu视频平台的架构师Zachary Cava,主题为“基于DASH扩展实时OTT服务(Scaling Live OTT with DASH)”。
用户1324186
2019/09/23
9070
基于DASH扩展实时OTT服务
Ceph监控Ceph-dash安装
Ceph的监控有很多啊,calamari或inkscope等,我开始尝试安装这些的时候,都失败了,后来Ceph-dash走入了我的眼帘,Ceph-dash根据官方描述,我个人觉得是最简单安装的了,但是安装过程中出现的不好使用的情况,加上目前互联网上缺乏相关的Ceph-dash的安装资料,还是花费了我不少的时间的。
星哥玩云
2022/07/03
5410
LLHLS、LHLS、DASH-LL对比
HLS和DASH是两大基于HTTP的流媒体通信协议。随着人们对低延迟需求的不断提高,这两个协议都发展出了各自的多个低延迟版本。在Mile High Video 2019(MHV/2019)上,来自Akamai的Will Law做了题为“LL-HLS LHLS DASH-LL, Challenges and differences”的演讲,介绍了这三个低延迟协议异同。
用户1324186
2019/09/16
4.6K0
Run ploty dash app in jupyter notebook
You could insert the code in begining of the jupyter notebook.
Fred Liang
2018/08/02
4740
04.Python Dash网页开发:ubuntu服务器部署DASH网站(uWSGI+nginx)
并且需要再app.py文件最后一行加上,因为wsgi从app.py中导入并运行的是server
生信探索
2023/05/23
9070
Dash与Bash的语法区别
本文系转载,原文URL为:http://www.igigo.net/archives/169
一见
2018/08/07
2.6K0
plotly-express-3-Dash_callback
The dash_html_components library provides classes for all of the HTML tags, and the keyword arguments describe the HTML attributes like style, className, and id.
皮大大
2021/03/01
6060
plotly-express-3-Dash_callback
针对DASH视频的广告管理系统
本文来自MHV (Mile High Video) 2019的演讲,作者是来自于Google公司负责DAI设计的Rohit Wagle。本次演讲主要讲述了DAI在广告管理系统中的工作原理以及如何在DASH中进行广告插入。
用户1324186
2019/09/19
1.5K0
针对DASH视频的广告管理系统
plotly-express-6-Dash实现直方图
如何利用plotly-express结合Dash实现直方图,最终的效果图 数据 数据是自行模拟的,姓名作为行索引,科目当做属性字段 import pandas as pd import numpy
皮大大
2021/03/01
6120
plotly-express-6-Dash实现直方图

相似问题

实现GetEnumerator的IDictionary

13

LRU算法的实现

11

LinkedHashSet实现LRU

22

Simplescalar缓存LRU实现

31

并发LRU缓存实现

512
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文