问题标签 [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.
java - 为什么 Java 中的同步关键字称为“同步”而不是更精确的“互斥”?
我听说在 Java 中选择使用“同步”这个词来描述互斥语句只是一个错误(编辑:“错误”在这里是一个错误的选择。请参阅编辑),但我想知道是否有实际上是选择背后的原因。
[编辑]
在 Safyan 的评论的推动下,我想补充一点,同步是建立线程之间时序关系的通用术语。它可以包括互斥和速率控制之类的东西(例如,两个线程以相同的速率做某事)。使用“同步”来表示互斥而不是更具体的关键字(如“互斥”)似乎不必要地模棱两可。
java - 我对同步块的假设是否正确?
我有一个带有同步块的方法shout()。
如果我有两个运行此方法的线程,我是否正确假设两个“同步呐喊”总是一个接一个地出现?“同步呐喊”之间不能有其他语句吗?
java - 同步的,不可变的,空集合
使用 Collections 类,我们可以使任何集合同步、不可变或为空
当我们需要实现这些类型的集合时,它们各自有什么用途
java - 将 synchronized() 与 ReentrantLock.lock() 混合
在 Java 中,执行ReentrantLock.lock()
并ReetrantLock.unlock()
使用与 ? 相同的锁定机制synchronized()
?
我的猜测是“不”,但我希望是错的。
例子:
想象一下线程 1 和线程 2 都可以访问:
线程 1 运行:
线程 2 运行:
假设线程 1 先到达它的部分,然后在线程 1 完成之前线程 2:线程 2 是等待线程 1 离开synchronized()
块,还是继续运行?
java - 如何在java中同步静态方法
我在 Java 中实现单例模式时提出了这个问题。尽管下面列出的示例不是我的真实代码,但与原始代码非常相似。
因为我不太确定静态同步方法的行为,所以我从谷歌得到了一些建议——在同一个类中不要(或尽可能少)多个静态同步方法。我猜在实现静态同步方法时,使用了属于 Class 对象的锁,因此多个静态同步方法可能会降低系统性能。
我对吗?还是JVM使用其他机制来实现静态同步方法?如果我必须在一个类中实现多个静态同步方法,最佳实践是什么?
谢谢你们!
亲切的问候!
java - 简单的java同步问题
在 Groovy 代码中一些简单的东西:#!/usr/bin/env groovy
好的,这是我更详细的问题。
线程 (A) 在单独的线程中启动一个操作,然后等待其完成——好的,这不完全正确,否则可以使用 thread.join()。这个线程实际上启动了一个任务,然后最终发出 methodOne 信号
线程(B)我们在动作完成时得到一个信号
这段代码可以吗,还是我仍然遇到潜在问题?有什么更好的解决方法?
米莎
我想知道,这是正确的:
选项一
选项二
为什么?
java - Java同步方法锁定对象还是方法?
如果我在同一个类中有 2 个同步方法,但每个都访问不同的变量,那么 2 个线程可以同时访问这 2 个方法吗?锁定是否发生在对象上,或者它是否与同步方法中的变量一样具体?
例子:
x.addA(
2个线程可以同时访问同一个X类实例x.addB()
吗?
winapi - 是否有一组 Win32 API 函数来管理同步队列?
我有一个带有多个工作线程的程序和一个接收作业的主线程。在主线程中,我想将作业排入同步队列,并让工作线程坐在那里等待队列。当队列中有东西时,我希望工作人员从队列中拉出工作,而剩余的工作则坐在那里等待另一个工作。
我找到了 CreateMsgQueue(http://msdn.microsoft.com/en-us/library/ms885180.aspx),但这似乎只存在于 Windows CE 中。
我知道我可以自己写这个,但是如果某些东西已经存在,我会傻到不使用它。
我正在使用 Visual Studio 2005 在 c++ 中进行开发。
任何建议都非常感激。
谢谢丰富
java - Java中一个线程可以同时对两个锁调用wait()吗(6)
我一直在搞乱Java 中的线程来了解它们(这似乎是最好的方法),现在了解同步、wait() 和 notify() 发生了什么。
我很好奇是否有一种方法可以同时等待两个资源。我认为以下内容不会完全符合我的想法(编辑:请注意,此示例中省略了通常的 while 循环,仅专注于释放两个资源):
在这种(非常人为的)情况下,将保留 token2 直到返回 token1,然后保留 token1 直到返回 token2。目标是释放 token1 和 token2,然后在两者都可用时恢复(请注意,将 token1.wait() 移到内部同步循环之外并不是我想要的)。
检查两者是否可用的循环可能更适合实现这种行为(这会接近双重检查锁定的想法吗?),但会占用额外的资源 - 我不是在寻求最终的解决方案,因为这只是来满足我的好奇心。
编辑让我们只是为了争论,这里的两个标记代表线程必须同时使用的两个不同的资源,而其他一些线程将同时需要这两个资源。
java - 字段读取同步和易失性之间的区别
在一篇包含一些并发技巧的好文章中,一个示例被优化为以下几行:
如果我理解正确,同步的重点是确保该线程读取的 acct.balance 的值是最新的,并且任何挂起的对 acct.balance 中对象字段的写入也被写入主内存.
这个例子让我想到了一点:将acct.balance(即类Account的字段余额)声明为不是更有效volatile
吗?它应该更有效,节省您synchronize
对 acct.balance 的所有访问权限,并且不会锁定整个acct
对象。我错过了什么吗?