问题标签 [synchronized]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
686 浏览

java - Java:如何对数组元素进行双重检查锁定?

这是我的代码目前的样子:

现在我想让它线程安全。我知道Java中的双重检查锁定是“teh 3vilness!!1”,但由于ensureInitialized可能经常被调用,我不希望它被同步。所以我正在考虑这样做:

现在我该怎么做才能使这个真正的线程安全?
一些子问题:

  • 没有必要制作isInitializedvolatile,因为变量没有改变,对吧?
  • 数组元素发生了变化,我怎样才能让它们变得易变?
  • 通常有更好的方法来做到这一点吗?

(还要注意这是一个实例方法,所以静态初始化器将不起作用)

0 投票
1 回答
939 浏览

powershell - Sync'd Hashtable 对 PowerShell 显示不友好。试试:[HashTable]::Synchronized(@{})

我有一个来自 .Net 的对象,该对象具有 SyncHashTable 类型的属性,如果没有抛出异常,则无法查看该属性。

单行复制:

使用 repro 更容易玩多线:

错误:

有人对此有任何见解吗?

0 投票
4 回答
8361 浏览

java - Objective-C 中同步的等价物是什么?

目标c中java同步的等价物是什么?我希望能够使我的单例方法安全,因此当从 2 个不同的线程调用它时,他们会尝试一个一个地使用它。

0 投票
4 回答
4471 浏览

java - 我们是否需要使用 MappedByteBuffer.force() 将数据刷新到磁盘?

我正在使用 MappedByteBuffer 来加速文件读/写操作()。我的问题如下:

  1. 我不确定是否需要使用 .force() 方法将内容刷新到磁盘。似乎没有 .force(),.getInt() 仍然可以完美工作(好吧,因为这是一个内存映射缓冲区,我假设 .getInt() 从磁盘获取数据,这意味着数据已被刷新到磁盘已经。

  2. .force() 方法是阻塞方法吗?

  3. 阻塞方法是同步块吗?

  4. 调用或不调用 .force() 方法存在巨大的性能差异。手动调用 .force() 有什么好处?我们应该在什么情况下使用它?我假设不调用它,数据仍将在后台写入磁盘。

  5. 如果我们需要调用 .force(),从另一个线程调用它是否有助于提高性能?它会因为同步问题而损坏数据吗?

    导入 java.io.FileNotFoundException;导入 java.io.IOException;导入 java.io.RandomAccessFile;导入 java.nio.MappedByteBuffer;导入 java.nio.channels.FileChannel;导入 java.nio.channels.FileChannel.MapMode;

公共类主要{

}

0 投票
4 回答
125 浏览

java - 关于同步的意义

这可能是一个愚蠢的问题,但我是 Java 多线程编程的新手。我创建了 4 个线程,然后在它们上调用了 run 方法。在 run 方法中,我使用了一个数组并为其索引赋值。我看到每个线程都在维护它自己的数组副本,并且没有线程不安全的行为。我就是想知道这种情况下使用同步有什么意义?(我还以为是用来控制对共享资源的访问呢,这里的数组不应该是共享数据结构吗?)

0 投票
5 回答
3038 浏览

java - Java同步块使用方法调用获取同步对象

我们正在编写一些锁定代码并且遇到了一个特殊的问题。我们使用 ConcurrentHashMap 来获取我们锁定的 Object 实例。所以我们的同步块看起来像这样

我们重写了 ConcurrentHashMap 的 get 方法,使其在不包含 key 的情况下总是返回一个新对象。

但是是否存在get方法已经返回对象,但是线程还没有进入同步块的状态。允许其他线程获取相同的对象并锁定它。

我们有一个潜在的竞争条件是

  • 线程1:获取key为A的对象,但不进入同步块
  • 线程2:获取key为A的对象,进入一个同步块
  • 线程 2:从地图中移除对象,退出同步块
  • 线程 1:与不再在映射中的对象进入同步块
  • 线程 3:获取密钥 A 的新对象(与线程 1 获取的对象不同)
  • 线程 3:进入一个同步块,而线程 1 也在其同步块中,两者都使用键 A

如果 java 在 get 调用返回后直接进入同步块,则不会出现这种情况。如果没有,是否有人对我们如何删除密钥而不必担心这种竞争条件有任何意见?

0 投票
4 回答
5363 浏览

java - 分析 Java:找出线程花费时间阻塞的地方

我有一个多线程应用程序,它一开始就可以很好地扩展,但是在 16-cpu 服务器上运行,一旦我超过 5 或 6 个硬件线程,性能就会下降。我怀疑瓶颈围绕着一种同步方法。但是,在我开始深入研究代码并尝试用非阻塞算法替换算法之前,我需要确定这是有罪的方法。

使用-Xprof参数运行 Java告诉我,正如我所料,线程大部分时间都被阻塞了。有没有办法可以将其分解为他们在特定方法上花费了多少时间?

0 投票
1 回答
197 浏览

java - 询问线程、数组和缓存内存

我希望以一种好的方式:-) 我写了这段代码。我想做的是构建类似“缓存”的东西。我假设我必须注意不同的线程,因为可能有很多调用会到达那个类,所以我尝试了 ThreadLocal 功能。基本模式是有“许多向量集”向量包含如下内容: VECTOR.FieldName = "X" VECTOR.FieldValue= "Y" 集合中有这么多向量对象。针对来自不同机器、用户、对象的不同调用的不同设置。

所以......我在附件中有它,我像这样使用它:

好的部分:Bufferedline 是基于数据文件的一些分隔符的分割线。文件可以是任意大小。

那么你怎么看这段代码呢?我应该担心吗?对于这条消息的大小,我深表歉意!

0 投票
3 回答
2066 浏览

java - 混合 volatile 和 synchronized 作为读写锁

考虑一个具有大量线程读取和少量线程写入的原始类型变量,以下代码会正常工作吗?

如果可以,它是否提供比 1) 更好的性能。在所有方法上声明同步;2)。使用显式读写锁?

这是一种常见的模式吗?如果不是,在这种情况下通常使用什么模式?

这目前对我来说很好,但我觉得同时使用 volatile 和 synchronized 有点多余。

0 投票
0 回答
226 浏览

c# - Silverlight 中的 SynchronizedCollection

我需要确保多个线程安全地访问该集合。为此,我SynchronizedCollection在我的 .NET 项目中使用。现在我正在处理 Silverlight 项目,我面临同样的问题 - 集合必须是线程安全的。

我认为这SynchronizedCollection在 Silverlight 中不可用。实现目标的方法是什么?

是否有可能同时适用于 Silverlight 和 .NET 4.0 的解决方案?

提前感谢您的回复和线索!

干杯