问题标签 [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 投票
3 回答
839 浏览

java - 为什么 Java 中的同步关键字称为“同步”而不是更精确的“互斥”?

我听说在 Java 中选择使用“同步”这个词来描述互斥语句只是一个错误(编辑:“错误”在这里是一个错误的选择。请参阅编辑),但我想知道是否有实际上是选择背后的原因。

[编辑]

在 Safyan 的评论的推动下,我想补充一点,同步是建立线程之间时序关系的通用术语。它可以包括互斥和速率控制之类的东西(例如,两个线程以相同的速率做某事)。使用“同步”来表示互斥而不是更具体的关键字(如“互斥”)似乎不必要地模棱两可。

0 投票
3 回答
340 浏览

java - 我对同步块的假设是否正确?

我有一个带有同步块的方法shout()。

如果我有两个运行此方法的线程,我是否正确假设两个“同步呐喊”总是一个接一个地出现?“同步呐喊”之间不能有其他语句吗?

0 投票
1 回答
215 浏览

java - 同步的,不可变的,空集合

使用 Collections 类,我们可以使任何集合同步、不可变或为空

当我们需要实现这些类型的集合时,它们各自有什么用途

0 投票
3 回答
5671 浏览

java - 将 synchronized() 与 ReentrantLock.lock() 混合

在 Java 中,执行ReentrantLock.lock()ReetrantLock.unlock()使用与 ? 相同的锁定机制synchronized()

我的猜测是“不”,但我希望是错的。

例子:

想象一下线程 1 和线程 2 都可以访问:

线程 1 运行:

线程 2 运行:

假设线程 1 先到达它的部分,然后在线程 1 完成之前线程 2:线程 2 是等待线程 1 离开synchronized()块,还是继续运行?

0 投票
5 回答
6043 浏览

java - 如何在java中同步静态方法

我在 Java 中实现单例模式时提出了这个问题。尽管下面列出的示例不是我的真实代码,但与原始代码非常相似。

因为我不太确定静态同步方法的行为,所以我从谷歌得到了一些建议——在同一个类中不要(或尽可能少)多个静态同步方法。我猜在实现静态同步方法时,使用了属于 Class 对象的锁,因此多个静态同步方法可能会降低系统性能。

我对吗?还是JVM使用其他机制来实现静态同步方法?如果我必须在一个类中实现多个静态同步方法,最佳实践是什么?

谢谢你们!

亲切的问候!

0 投票
3 回答
238 浏览

java - 简单的java同步问题

在 Groovy 代码中一些简单的东西:#!/usr/bin/env groovy


好的,这是我更详细的问题。

线程 (A) 在单独的线程中启动一个操作,然后等待其完成——好的,这不完全正确,否则可以使用 thread.join()。这个线程实际上启动了一个任务,然后最终发出 methodOne 信号

线程(B)我们在动作完成时得到一个信号

这段代码可以吗,还是我仍然遇到潜在问题?有什么更好的解决方法?

米莎


我想知道,这是正确的:

选项一

选项二

为什么?

0 投票
11 回答
201536 浏览

java - Java同步方法锁定对象还是方法?

如果我在同一个类中有 2 个同步方法,但每个都访问不同的变量,那么 2 个线程可以同时访问这 2 个方法吗?锁定是否发生在对象上,或者它是否与同步方法中的变量一样具体?

例子:

x.addA(2个线程可以同时访问同一个X类实例x.addB()吗?

0 投票
1 回答
3541 浏览

winapi - 是否有一组 Win32 API 函数来管理同步队列?

我有一个带有多个工作线程的程序和一个接收作业的主线程。在主线程中,我想将作业排入同步队列,并让工作线程坐在那里等待队列。当队列中有东西时,我希望工作人员从队列中拉出工作,而剩余的工作则坐在那里等待另一个工作。

我找到了 CreateMsgQueue(http://msdn.microsoft.com/en-us/library/ms885180.aspx),但这似乎只存在于 Windows CE 中。

我知道我可以自己写这个,但是如果某些东西已经存在,我会傻到不使用它。

我正在使用 Visual Studio 2005 在 c++ 中进行开发。

任何建议都非常感激。

谢谢丰富

0 投票
2 回答
4037 浏览

java - Java中一个线程可以同时对两个锁调用wait()吗(6)

我一直在搞乱Java 中的线程来了解它们(这似乎是最好的方法),现在了解同步、wait() 和 notify() 发生了什么。

我很好奇是否有一种方法可以同时等待两个资源。我认为以下内容不会完全符合我的想法(编辑请注意,此示例中省略了通常的 while 循环,仅专注于释放两个资源):

在这种(非常人为的)情况下,将保留 token2 直到返回 token1,然后保留 token1 直到返回 token2。目标是释放 token1 和 token2,然后在两者都可用时恢复(请注意,将 token1.wait() 移到内部同步循环之外并不是我想要的)。

检查两者是否可用的循环可能更适合实现这种行为(这会接近双重检查锁定的想法吗?),但会占用额外的资源 - 我不是在寻求最终的解决方案,因为这只是来满足我的好奇心。

编辑让我们只是为了争论,这里的两个标记代表线程必须同时使用的两个不同的资源,而其他一些线程将同时需要这两个资源。

0 投票
3 回答
1959 浏览

java - 字段读取同步和易失性之间的区别

在一篇包含一些并发技巧的好文章中,一个示例被优化为以下几行:

如果我理解正确,同步的重点是确保该线程读取的 acct.balance 的值是最新的,并且任何挂起的对 acct.balance 中对象字段的写入也被写入主内存.

这个例子让我想到了一点:将acct.balance(即类Account的字段余额)声明为不是更有效volatile吗?它应该更有效,节省您synchronize对 acct.balance 的所有访问权限,并且不会锁定整个acct对象。我错过了什么吗?